同步處理、非同步和承諾

請務必管理函式的生命週期,確保函式能正確解析。只要正確終止函式,就能避免產生過多費用 例如函式是否長時間執行此外,您也可以確保在函式順利達到終止條件或狀態之前,執行函式的 Cloud Functions 例項不會關閉。

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

  • 透過傳回 JavaScript 應許,解析執行非同步處理作業 (也稱為「背景函式」) 的函式。
  • 使用 res.redirect()res.send()res.end() 終止 HTTP 函式
  • 使用 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 程式碼 樣本 也包含適當的終止函式範例。以下列舉幾個常見的情況: