【发布时间】:2018-09-17 08:49:22
【问题描述】:
我正在努力编写异步 https 谷歌云函数,无论我尝试什么都失败了,“函数崩溃”/“套接字挂断”。我知道我需要正确终止该功能,但我不清楚如何执行此操作,甚至不清楚是否可以使用异步 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"]}}
- 节点:6.11.5
- 纱线:1.5.1
- 火力基地:4.12.1
- firebase 工具:3.18.2
- firebase 管理员:5.12.0
替代方法似乎会导致异步代码(例如 Promise 解析)被静默杀死。例如
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...");
});
});
在浏览器中产生“开始...”,以及第一条日志消息,但不是后续消息。
【问题讨论】:
-
替代方法似乎会导致异步代码(例如 Promise 解析)被静默杀死。例如
标签: javascript firebase google-cloud-functions