Cloud Function停止对随机外部API调用的响应
[嗨,我正在使用云功能开发应用程序。因此,我正在使用Blaze订阅,并且正在对AWS / Azure服务器进行多个API调用。这些调用大部分时间都不会解决,执行只会停止。停止,我不是说超时,而是停止,我是指无限期停止,我不会收到任何错误或超时。它将停止工作并做出响应
事实是,它在本地仿真器上可以正常工作,但是一旦我在服务器上对其进行测试,它便会执行该行为。
尝试异步调用函数或某些东西时可能会丢失某些东西吗?
请帮助吗?
这是代码的主要逻辑:index.js
APIEngine.initialize(payload)
.then(async result => {
new ResourceEngine(result, payload)
.getResourceFromRegions()
.then(resources => {
console.log("signature resources: ", resources);
// new ScanEngine(
// resources.apiEngine,
// resources.response,
// payload.report
// ).run();
})
.catch(err => {
console.log("error ===>", err);
});
})
.catch(err => {
return console.log("ERROR ====>", err);
});
回答如下:如果您正在云函数内部发出异步HTTP请求,并且在执行异步块之前在Stackdriver Logging中收到function终止日志,这意味着您不能很好地管理函数的生命周期并且您需要对代码进行更改,以避免调用无法解决的问题。
您需要在异步调用完成后通知该函数。
如果您的函数是HTTP函数(https://cloud.google/functions/docs/writing/http),则在收到您的promise响应时只需要响应200 OK => .then块内的res.status(200).send(“ OK”) 。
如果您的函数是后台函数(https://cloud.google/functions/docs/writing/background),则需要使用“ return”将诺言返回给该函数
示例:
return APIEngine.initialize(payload)
.then(async result => {
new ResourceEngine(result, payload)
.getResourceFromRegions()
.then(resources => {
console.log("signature resources: ", resources);
// new ScanEngine(
// resources.apiEngine,
// resources.response,
// payload.report
// ).run();
})
.catch(err => {
console.log("error ===>", err);
});
})
.catch(err => {
return console.log("ERROR ====>", err);
});