同步處理、非同步和承諾

管理函式的生命週期非常重要,確保其可解析 正確做法。只要正確終止函式,就能避免產生過多費用 例如函式是否長時間執行您也可以確保 執行您函式的 Cloud Functions 執行個體不會關閉 才能順利達到其終止條件或狀態。

使用以下建議的方法來管理函式的生命週期:

  • 傳回 JavaScript 承諾
  • 使用 res.redirect()res.send() res.end()
  • 使用 return; 陳述式終止同步函式。

運用 JavaScript 的承諾來簡化非同步程式碼

Promise 是非同步程式碼回呼的新式替代方案。承諾 代表運算及其可能傳回的未來值。還可讓您 套用類似同步程式碼中 try/catch 的錯誤。你可以前往 Firebase SDK 的 Firebase 功能 網誌 原則和保證 MDN

承諾如何與函式搭配運作

將 JavaScript 承諾傳回函式時,該函式 會繼續運作,直到承諾解決或遭拒為止。為了表示 函式已成功完成其工作,但仍應解決承諾。目的地: 指出錯誤,承諾應拒絕。換句話說,您只需要 處理不想要的錯誤

下列程式碼採用 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 程式碼 範例 也包含適當的終止函式範例。這裡列舉了 典型案例: