管理函式的生命週期非常重要,確保其可解析 正確做法。只要正確終止函式,就能避免產生過多費用 例如函式是否長時間執行您也可以確保 執行函式的 Cloud Functions 執行個體不會關閉 才能順利達到其終止條件或狀態。
使用以下建議的方法來管理函式的生命週期:
- 傳回 JavaScript 承諾。
- 使用
res.redirect()
、res.send()
或res.end()
。 - 使用
return;
陳述式終止同步函式。
運用 JavaScript 的承諾來簡化非同步程式碼
Promise 是非同步程式碼回呼的新式替代方案。承諾 代表運算及其可能傳回的未來值。還可讓您 套用類似同步程式碼中 try/catch 的錯誤。你可以前往 Firebase SDK 的 Firebase 功能 網誌、 原則和保證 MDN。
承諾如何與函式搭配運作
將 JavaScript 承諾傳回函式時,該函式 會繼續運作,直到承諾解決或遭拒為止。為了表示 函式已成功完成其工作,但仍應解決承諾。目的地: 指出錯誤,承諾應拒絕。這代表您只需要 處理不想要的錯誤
以下程式碼使用 Firebase Realtime Database 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
寫入:
在
then
子句中擲回錯誤 - 定期刪除未使用的 帳戶: 遭拒的承諾