firebase - firebase 事务重试是否在事务之外运行代码?
问题描述
如果事务之外还有更多的代码/逻辑应该只在事务成功时运行,这些代码会在重试成功后运行吗?请参阅下面基于我的 Express 路由处理程序的解释示例。
app.post('/some/path/to/endpoint', async (req, res) => {
try {
await db.runTransaction(async t => {
const snapshot = t.get(someDocRef);
const data = snapshot.data();
doSomething(snapshot);
return t.update(snapshot.ref, { someChanges });
});
// QUESTION: If transaction retries and succeeds, will the below code run once?
// logic that requires the transaction succeeds
await axios.post(url, data);
res.status(200).send('success');
} catch (e) {
res.status(500).send('system error');
}
});
欣赏专家对此的看法。谢谢
解决方案
您可以在此处找到 runTransaction 的文档。
如您所见,runTransaction()
返回一个 Promise。当您等待一个 Promise 并且将代码插入到 try/catch 块中时,如果抛出错误,则后面的所有内容都将被忽略,因为流程将进入 catch 语句。
所以答案是肯定的:runTransaction() 之后的所有内容,按照您编写的方式,如果出现问题,将不会被执行。
推荐阅读
- ios - 我不明白为什么我的手机没有出现?
- firebase - 添加 oauth clientId 因资源的最大限制而失败
- angular - Angular app ng build --prod 失败,脚本中出现错误。来自 Terser 的 6e3f538f18f55b02ca8a.js
- awk - 只保留最后一个重复行
- hyperledger - 有人知道 PBFT 中的主动恢复是如何工作的吗?
- python - 循环中的 Kivy 动画
- python - 我应该在 conda 环境内部还是外部安装编程 IDE(Windows 10 中的 tensorflow 2)
- javascript - 如何通过服务工作者更新缓存的资源
- javascript - React-Bootstrap 选项卡 defaultActiveKey 不随 stateChange 改变
- arrays - 使用聚合对 MongoDB 中的嵌套数组进行排序