首页 > 解决方案 > 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');
    }
});

欣赏专家对此的看法。谢谢

标签: firebasetransactions

解决方案


您可以在此处找到 runTransaction 的文档。

如您所见,runTransaction()返回一个 Promise。当您等待一个 Promise 并且将代码插入到 try/catch 块中时,如果抛出错误,则后面的所有内容都将被忽略,因为流程将进入 catch 语句。

所以答案是肯定的:runTransaction() 之后的所有内容,按照您编写的方式,如果出现问题,将不会被执行。


推荐阅读