Jam*_*mes 5 node.js firebase google-cloud-functions
我正在使用Cloud Functions for Firebase:
我对第三方API的调用使用请求Node.js模块,并包含getInfoFromApi()
在index.js中的function()中.
我遇到的问题是辅助函数调用的执行始终在15-20秒之间.注意:云功能本身在400 ms范围内始终如一地完成执行.
通过将简单的注释记录到控制台,我可以看到函数何时启动,何时调用辅助函数以及何时收到第三方的响应,所以我想我可以看到发生了什么.
粗略地说,时间看起来像这样:
getInfoFromApi()
调用函数(!)我的问题:
你可以在这里看到index.js的简化要点:https://gist.github.com/anonymous/7e00420cf2623b33b80d88880be04f65
以下是Firebase控制台的示例,其中显示了示例时间.注意:输出与上面的代码略有不同,因为我简化了上面的代码以帮助理解.
该getInfoFrom3rdParty()
调用是一个异步事件。但是,您尚未从函数返回承诺,因此 Functions 不会等待异步事件完成。
在我看来,由于您返回未定义,该函数也假设它失败并重试。在重试过程中的某个时刻,异步事件可能在函数退出之前完成(即由于竞争条件而意外成功)。我在其他情况下看到了类似的结果,即用户没有在其函数中返回承诺或值。
我无法从要点中看出你想要做什么——它似乎实际上对第三方结果没有做任何事情,并且可能不是你的用例的现实 mcve。但这样的东西可能就是你想要的:
exports.getInfo = functions.https.onRequest((request, response) => {
// ....
// NOTE THE RETURN; MOST IMPORTANT PART OF THIS SAMPLE
return getInfoFromThirdParty(...).then(() => {
response.writeHead(200, {"Content-Type": "application/json"});
response.end(JSON.stringify(payload));
}).catch(e => /* write error to response */);
});
function getInfoFrom3rdParty(food) {
reqObj.body = '{"query": "'+food+'"}';
return new Promise((resolve, reject) => {
mainRequest(reqObj, function (error, response, body) {
// ....
if( error ) reject(error);
else resolve(...);
// ....
});
});
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1586 次 |
最近记录: |