同步處理、非同步和承諾

管理函式的生命週期非常重要,確保能正確解析。只要正確終止函式,就能避免函式執行太長或無限迴圈,避免產生超額費用。此外,您可以確保執行函式的 Cloud Functions 執行個體不會在您的函式成功達到終止條件或狀態前關閉。

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

  • 透過傳回 JavaScript 入侵來解決執行非同步處理 (又稱為「背景函式」) 的函式。
  • 使用 res.redirect()res.send()res.end() 終止 HTTP 函式
  • 使用 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 程式碼範例都包含適當函式終止的範例。以下幾個示範一般案例: