同步、异步和 Promise

请务必管理函数的生命周期,以确保其正确解析。通过正确终止函数,您可以避免运行时间过长或无限循环的函数产生过多费用。此外,您可以确保运行函数的 Cloud Functions 实例在函数成功达到终止条件或状态之前不会关闭。

使用以下这些建议的方法来管理函数的生命周期:

  • 通过返回 JavaScript promise 来解析执行异步处理的函数(也称为“后台函数”)。
  • 使用 res.redirect()res.send()res.end() 终止 HTTP 函数
  • 使用 return; 语句终止同步函数。

使用 JavaScript promise 简化异步代码

Promise 是异步代码回调的新式替代方案。Promise 代表一项操作及其可能返回的未来值。它还会让您在同步代码中传播类似于 try/catch 的错误。您可以在 Firebase 博客上了解 Firebase SDK 中的 Promise,并在 MDN 上大致了解 Promise。

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 代码示例都会示范正确的函数终止。以下是演示一些典型使用情形的示例: