在 forEach 问题中对交易进行序列化。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在 forEach 问题中对交易进行序列化。相关的知识,希望对你有一定的参考价值。
我试着把这2个查询包在一个事务上,就像这样
const transaction = await db.sequelize.transaction()
try {
await Table1.create({
name: data.name
}, {transaction});
trainees.foreach(async trainee => {
await Table2.create({
name: trainee.name
}, {transaction});
})
await transaction.commit();
api.publish(source, target, false, {message: `Data successfully saved`});
} catch (error) {
await transaction.rollback();
api.error(source, target, {
message: error.message || `Unable to save data`
});
}
第一个查询被执行了,但是第二个查询出现了下面的错误,我试着把这三个查询包在一个事务上,像这样 const transaction = await db.sequelize.transaction() try { await Table1.create({ name: data.name }, {transans}.
commit has been called on this transaction(2f8905df-94b9-455b-a565-803e327e98e1), you can no longer use it. (The rejected query is attached as the 'sql' property of this error)
答案
试试这个。
try {
await db.sequelize.transaction(async transaction => {
await Table1.create({
name: data.name
}, {transaction});
// you should await each iteration
// forEach function of an Array object can't do it
for (const trainee of trainees) {
await Table2.create({
name: trainee.name
}, {transaction});
}
await Table3.create({
name: data.name
}, {transaction});
api.publish(source, target, false, {message: `Data successfully saved`});
})
} catch (error) {
api.error(source, target, {
message: error.message || `Unable to save data`
});
}
以上是关于在 forEach 问题中对交易进行序列化。的主要内容,如果未能解决你的问题,请参考以下文章