我很难编写一个异步的https Google函数,无论我尝试什么都失败了,“函数崩溃”/“套接字挂起”。我知道我需要正确地终止这个函数,但是我不清楚如何做到这一点,甚至不清楚异步https函数是否可行,尽管似乎有几个例子,而且我发现文档不清楚。
示例代码:
exports.asyncTest3 = Functions.https.onRequest((req: Functions.Request, res: Functions.Response) => {
Log.info("asyncTest3 start");
return new Promise(function (resolve, reject) {
setTimeout(function () {
Log.info("asyncTest3 timeout");
res.send("All done...");
resolve();
}, 50);
});
});http://localhost:5000/door-key-app/us-central1/asyncTest3给出:
{"error":{"code":500,"status":"INTERNAL","message":"function crashed","errors":["socket hang up"]}}替代方法似乎会导致异步代码(例如允诺解析)被默默地扼杀。例如。
exports.asyncTest4 = Functions.https.onRequest((req: Functions.Request, res: Functions.Response) => {
Log.info("asyncTest4 start");
res.write("starting...");
return new Promise(function (resolve, reject) {
setTimeout(function () {
Log.info("asyncTest4 timeout");
resolve();
}, 50);
})
.then(function () {
Log.info("asyncTest4 end");
res.send("All done...");
});
});收益“开始.”在浏览器中,以及第一条日志消息,而不是后续的日志消息。
发布于 2018-04-07 15:01:49
通过HTTPS调用的云函数并不是基于承诺的。相反,当您向调用方发送响应时,它们将终止。
所以:
exports.asyncTest3 = Functions.https.onRequest((req: Functions.Request, res: Functions.Response) => {
setTimeout(function () {
res.send("All done...");
}, 50);
});https://stackoverflow.com/questions/49707795
复制相似问题