我的NodeJS中有此代码。如果我将return放在request.post调用之前,则会得到响应,但在回调内部,我会得到{data:null}。
exports.addItem = functions.https.onCall((req, context)=>{
request.post(
{url: submitUrl,
form: req},
function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
return {result: "OK"};
}
else{
return {result: "Not OK"}
}
}
);
});
如果有帮助,我可以在firebase中运行此代码,并在JS中使用firebase函数调用它
答案 0 :(得分:0)
return
将导致函数结束,但在这样的异步回调中不会将任何内容发送给用户。没有要控制的调用功能要返回的值。
我不确定您要达到的目标,但是在这种情况下使用带有return
的值将导致该值丢失。
如果您需要提高对Node.js中异步回调习惯的理解,请查看https://blog.risingstack.com/node-hero-async-programming-in-node-js/。
答案 1 :(得分:0)
您应该使用async / await来解决此问题
exports.addItem = functions.https.onCall(async (req, res)=>{
await request.post(
{url: submitUrl,
form: req},
function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
return {result: "OK"};
}
else{
return {result: "Not OK"}
}
}
);
});