如何在 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
}
}
我正在使用 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
}
}