同步處理、非同步和承諾

請務必管理函式的生命週期,確保函式能正確解析。正確終止函式,可避免函式執行時間過長或無限迴圈,導致費用過高。此外,您也可以確保執行函式的 Cloud Functions 執行個體不會在函式成功達到終止條件或狀態之前關閉。

請採用下列建議做法,管理函式的生命週期:

  • 如要解析執行非同步處理的函式 (也稱為「背景函式」),請傳回 JavaScript 承諾。
  • 使用 res.redirect()、res.send() 或 res.end() 終止 HTTP 函式。
  • 使用 return; 陳述式終止同步函式。

使用 JavaScript Promise 簡化非同步程式碼

Promise 是非同步程式碼回呼的新式替代方案。Promise 代表一項作業,以及該作業可能傳回的未來值。您也可以在同步程式碼中傳播類似 try/catch 的錯誤。如要瞭解 Firebase SDK 中的 Promise,請參閱 Firebase 網誌;如要瞭解一般 Promise,請參閱 MDN。

Promise 如何與函式搭配運作

將 JavaScript promise 傳回函式時,該函式會持續執行,直到 promise 獲得解析或遭拒。如要表示函式已成功完成工作,應解析 Promise。如要指出錯誤,應拒絕 Promise。也就是說,您只需要處理想處理的錯誤。

下列程式碼會擷取 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 程式碼範例都包含適當函式終止的範例。以下列舉幾個典型案例: