首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步https Firebase Google功能失败,“函数崩溃”/“套接字挂起”

异步https Firebase Google功能失败,“函数崩溃”/“套接字挂起”
EN

Stack Overflow用户
提问于 2018-04-07 13:20:50
回答 1查看 640关注 0票数 0

我很难编写一个异步的https Google函数,无论我尝试什么都失败了,“函数崩溃”/“套接字挂起”。我知道我需要正确地终止这个函数,但是我不清楚如何做到这一点,甚至不清楚异步https函数是否可行,尽管似乎有几个例子,而且我发现文档不清楚。

示例代码:

代码语言:javascript
复制
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给出:

代码语言:javascript
复制
{"error":{"code":500,"status":"INTERNAL","message":"function crashed","errors":["socket hang up"]}}
  • 节点: 6.11.5
  • 纱线: 1.5.1
  • 火力基数: 4.12.1
  • 消防基地-工具: 3.18.2
  • 防火墙-管理: 5.12.0

替代方法似乎会导致异步代码(例如允诺解析)被默默地扼杀。例如。

代码语言:javascript
复制
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...");
    });
});

收益“开始.”在浏览器中,以及第一条日志消息,而不是后续的日志消息。

EN

回答 1

Stack Overflow用户

发布于 2018-04-07 15:01:49

通过HTTPS调用的云函数并不是基于承诺的。相反,当您向调用方发送响应时,它们将终止。

所以:

代码语言:javascript
复制
exports.asyncTest3 = Functions.https.onRequest((req: Functions.Request, res: Functions.Response) => {
    setTimeout(function () {
        res.send("All done...");
    }, 50);
});

看到关于终止HTTP函数的Firebase文档了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49707795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档