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觸發器只需要發送響應。如果你需要使用承諾來協調你的工作,那就這樣做,但是從函數返回一個承諾是不會做任何事情的。您必須在代碼中的每個可能的終止點發送響應。 –
完美,謝謝道格 –