【问题标题】:Firebase cloud function concurrent promises for https.onRequesthttps.onRequest 的 Firebase 云功能并发承诺
【发布时间】:2017-09-03 03:07:23
【问题描述】:

在 Firebase 云函数中,有一个对数据库引用的 set 调用,以及对另一个引用的并发 once("value") 调用,两者都返回承诺。在oncethen 处理程序内还有一个update,并且处理程序的功能比update 严格得多。

现在,这是一个 https.onRequest,所以我们不能返回承诺,例如不能做Promise.all([p1, p2]).then(blah blah blah)。那么我们应该如何在保证异步调用完成的同时返回response.status(200).send(dictionary)呢?

【问题讨论】:

    标签: firebase google-cloud-functions


    【解决方案1】:

    您基本上已经说明了解决方案:

    Promise.all([p1, p2]).then(blah blah blah)
    

    传递给Promise.all() 的承诺列表应该包含您需要等待的所有承诺。在上面写着“blah blah blah”的地方,放置一个发送结果的函数:

    results => {
        response.status(200).send(dictionary)
    }
    

    可能还想使用catch 发送错误响应以防出现问题。

    如果这不是您要查找的内容,请显示一些您实际尝试过的代码。

    【讨论】:

    • 我明白了。调用response.status(200).send(dictionary) 会终止函数执行吗?如果不是,那么是否也可以在其中一个 Promise 中而不是在 Promise.all 的处理程序中设置响应状态?顺便说一句,response.status() 是如何工作的?
    • 使用 Cloud Functions,HTTP 函数会在发送响应时终止。对于所有其他类型的函数,它应该返回一个表示完成的承诺。
    • 所以如果我这样做return Promise.all([p1, p2]).then(response.status(200)),在 Promise.all 有机会返回之前,函数是否已经被 response.status 语句终止?还是response.status 会向 Promise.all 发送返回值?
    • 不要费心返回承诺。完成所有工作后才发送结果。 Cloud Functions 将等待该响应发送或超时。也许您误解了then 的作用。传递给那里的函数只有在它的承诺被解决后才会被执行。
    • 我明白了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2018-04-19
    • 2019-07-14
    • 1970-01-01
    • 2018-05-24
    • 2017-12-13
    • 2020-03-21
    • 1970-01-01
    相关资源
    最近更新 更多