管理函數的生命週期以確保其正確解析非常重要。通過正確終止函數,您可以避免因運行時間過長或無限循環的函數而產生過多費用。此外,您可以確保運行您的函數的 Cloud Functions 實例不會在您的函數成功達到其終止條件或狀態之前關閉。
使用這些推薦的方法來管理函數的生命週期:
- 通過返回JavaScript promise解析執行異步處理的函數(也稱為“後台函數”)。
- 使用
res.redirect()
、res.send()
或res.end()
終止HTTP 函數。 - 用 return 終止一個同步函數
return;
陳述。
使用 JavaScript promises 簡化異步代碼
Promises 是異步代碼回調的現代替代方案。 promise 代表一個操作和它可能返回的未來值。它還允許您傳播類似於同步代碼中的 try/catch 的錯誤。您可以在Firebase 博客上閱讀 Firebase SDK 中的承諾,並在MDN上閱讀一般承諾。
Promise 如何與函數一起工作
當您將 JavaScript promise 返回給一個函數時,該函數會一直運行,直到該 promise 被解析或拒絕。為了表明一個函數已經成功地完成了它的工作,承諾應該被解決。要指示錯誤,應拒絕承諾。這意味著您只需要處理您想要處理的錯誤。
以下代碼採用 Firebase 實時數據庫ref
並將其值設置為"world!"
.通過返回set
的結果,您的函數可以保證繼續運行,直到將字符串寫入數據庫的異步工作完全完成:
// Always change the value of "/hello" to "world!"
exports.hello = functions.database.ref('/hello').onWrite(event => {
// set() returns a promise. We keep the function alive by returning it.
return event.data.ref.set('world!').then(() => {
console.log('Write succeeded!');
});
});
上下文中的示例
我們的大多數 Cloud Functions代碼示例都包含正確函數終止的示例。以下是一些展示典型案例的案例:
- 實時數據庫觸發器:一個 HTTP 函數,後跟一個重定向
- Cloud Storage 觸發器:存儲下載,然後是
then
- Webhook on Realtime Database write :
then
子句中拋出的錯誤 - 定期刪除未使用的帳戶:一個被拒絕的承諾