如何在 Sequelize 中使用带有函数调用的事务

How to use Transactions with Functions Calls in Sequelize

我正在使用 Sequelize Transactions。我想了解我们如何在执行函数调用时处理事务,并在被调用的函数中执行更多事务。

如果出现任何问题,应回滚所有事务,包括被调用函数中的事务。

我目前正在函数调用中将交易作为参数传递。

这是正确的方法吗?我在 Sequelize 文档中也找不到与之相关的任何内容。

只要您在调用该函数的任何地方捕获来自该函数的错误,将事务传递给该函数就应该可以正常工作,以便您可以在必要时回滚该事务。

const helperFunction(transaction) {
    // do something with transaction here
    // do NOT catch error here
    // No need to return Transaction
}

async function main() {
     let transaction;

     try {
          transaction = await sequelize.transaction();

          await helperFunction(transaction);

          await transaction.commit();
     } catch(err) {
          if (transaction) await transaction.rollback();
          // continue handling error
     }
}

您也可以只在我们的事务范围内定义那些函数,这样您就不必传递它。例如:

async function main() {
     let transaction;

     const helperFunction() {
         // do something with transaction here
         // do NOT catch error here
     }

     try {
          transaction = await sequelize.transaction();

          await helperFunction();

          await transaction.commit();
     } catch(err) {
          if (transaction) await transaction.rollback();
          // continue handling error
     }
}