了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。
了解详情
发送反馈
同步、异步和 Promise
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
请务必管理函数的生命周期,以确保其正确解析。通过正确终止函数,您可以避免运行时间过长或无限循环的函数产生过多费用。此外,您可以确保运行函数的 Cloud Functions 实例在函数成功达到终止条件或状态之前不会关闭。
使用以下这些建议的方法来管理函数的生命周期:
通过返回 JavaScript promise 来解析执行异步 处理的函数(也称为“后台函数”)。
使用 res.redirect()
、res.send()
或 res.end()
终止 HTTP 函数 。
使用 return;
语句终止同步 函数。
注意 :在所有情况下都请务必小心,避免函数的结果实际上会重新触发该函数的情形 - 例如,某个函数会在某个特定的 Realtime Database 路径中有数据写入时触发,但会在同一路径中有数据写入时终止。
使用 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 代码示例 都会示范正确的函数终止。以下是演示一些典型使用情形的示例:
发送反馈
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可 获得了许可,并且代码示例已根据 Apache 2.0 许可 获得了许可。有关详情,请参阅 Google 开发者网站政策 。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2023-10-06。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
需要向我们提供更多信息?
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2023-10-06\u3002"}
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2023-10-06。"]]