HTTPS函数应该像实时函数一样返回异步承诺吗? 我们还没有在HTTPS函数中返回(只是使用res.status.send等),它看起来像firebase /函数样本不是。但该文件略有含糊https://firebase.google.com/docs/functions/terminate-functions。异步https火力点功能
回答
HTTP函数当前不遵守返回的承诺 - 它们需要发送结果才能正常终止。如果HTTP功能不发送结果,它将超时。
所有其他类型的函数都需要返回的承诺,以便等待异步工作完全完成。
如果您没有任何异步工作需要等待,您可以立即返回。
这些是文档中概述的三种情况。
你的云功能,应该返回 “结束” 用下面的
res.redirect的(),res.send(),或res.end()
他们的意思是什么通过返回promise,是否让我们想象你有一个更新实时数据库中的节点的云功能,你想在响应HTTP请求之前完成这项工作。
实施例代码
let RemoveSomething = functions.https.onRequest((req, res) => {
cors(req, res,() => {
// Remove something
DoDatabaseWork()
.then(function (result) {
res.status(200).send();
})
.catch(function (err) {
console.error(err);
res.status(501).send();
});
});
});
更新:新增DoDatabaseWork例子。
const DoDatabaseWork = function() {
return new Promise(function (resolve, reject) {
// Remove SomeNode
admin.database().ref('/someNode/').remove()
.then(function (result) {
resolve();
})
.catch(function (err) {
console.error(err);
reject();
});
});
}
第二个示例没有显示它是什么类型的函数,但它不适用于HTTP函数。 HTTP功能目前不会观察到任何返回的承诺。当功能完成时,它们只使用发送的结果作为指示符。 –
第一个代码段是HTTP函数,它调用DoDatabaseWork“第二个示例”,并等待它完成数据库工作“删除节点”,然后HTTP函数返回状态码为200或501。 – Kim
您可以直接返回在这种情况下,从remove()中承诺。没有必要为此创造新的承诺。 –
- 1. 反应本地和火力点 - 火力功能作为参考
- 2. 如何从火力功能
- 3. Ios的火力地堡异步的LogIn
- 4. 火力地堡异步数据库
- 5. 异步功能
- 6. 云功能的火力地堡性能
- 7. 云功能的火力地堡 - 获取数据库值“同步”
- 8. 节点 - 异步功能不输出
- 9. 试验成功的火力点连接
- 10. 日食力异常功能
- 11. Syncronize异步功能
- 12. 如何从火力点的火力网
- 13. NextJS与火力地堡云功能
- 14. 存储功能火力地堡许可
- 15. 火力地堡离线功能和addListenerForSingleValueEvent
- 16. 整合谷歌云与火力功能
- 17. 火力地堡云功能路由
- 18. 如何在云功能上火力
- 19. 异步功能将数据传递给异步功能
- 20. 如何在火力点功能内使用路由器对象?
- 21. 火力地堡云功能:从不同的节点
- 22. 如何应对火力点触发功能的执行顺序
- 23. 火力点云功能的交易工作零星
- 24. 如何取消设置火力点云功能环境变量
- 25. JavaScript,点击火功能
- 26. 火力地堡性能 - 获取节点
- 27. 中止异步调用的能力
- 28. 获取异步父功能
- 29. 异步JavaScript和功能
- 30. 异步功能不运行
谢谢@Doug Stevenson 我们发送了res结果,但我们不确定如果HTTP函数在未返回异步代码时保持活动状态。对于我在这里阅读的文档,它看起来好像HTTP函数需要返回异步并发送解析结果:https://firebase.google.com/docs/functions/terminate-functions –
HTTP触发器只需要发送响应。如果你需要使用承诺来协调你的工作,那就这样做,但是从函数返回一个承诺是不会做任何事情的。您必须在代码中的每个可能的终止点发送响应。 –
完美,谢谢道格 –