Catch up on everthing we announced at this year's Firebase Summit. Learn more

同步、異步和承諾

管理函數的生命週期以確保它正確解析很重要。通過正確終止函數,您可以避免運行時間過長或無限循環的函數產生過多費用。此外,您可以確保在您的函數成功達到其終止條件或狀態之前,運行您的函數的 Cloud Functions 實例不會關閉。

使用這些推薦的方法來管理功能的生命週期:

  • 解析函數,通過返回執行異步處理(也稱為“後台功能”)的JavaScript承諾
  • 終止HTTP函數res.redirect() res.send()res.end()
  • 終止與同步功能return;陳述。

使用 JavaScript 承諾簡化異步代碼

Promise 是異步代碼回調的現代替代方案。一個承諾代表一個操作和它可能返回的未來值。它還允許您在同步代碼中傳播類似於 try/catch 的錯誤。你可以閱讀有關的火力地堡SDK承諾的火力地堡博客,並承諾在一般的MDN

Promise 如何與函數一起工作

當您向函數返回 JavaScript 承諾時,該函數會一直運行,直到承諾被解析或拒絕。為了表明一個函數已經成功地完成了它的工作,promise 應該被解析。為了表明錯誤,應拒絕承諾。這意味著您只需要處理您想要的錯誤。

下面的代碼需要火力地堡實時數據庫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!');
  });
});

上下文中的示例

我們大多數的雲功能的代碼示例包括適當的功能結束的例子。以下是一些典型案例: