在 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 问题中对交易进行序列化。的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP/Eclipse 中对 foreach 循环中从数组中拉出的自定义对象进行智能感知?

拆分 reducer 在 redux 中对同一片数据进行操作

无法在 Laravel 的双 foreach 循环中对数据进行排序

如何在foreach中序列化jdbc连接以进行火花节点分布

sql面试题_SQl优化技巧_1注意通配符中like的使用,百分号放后面_2避免在where子句中对字段进行函数操作_3在子查询当中,尽量用exists代替in_4where子句中尽量不要使用(代码片

在 Eloquent 中对时间戳进行排序