【问题标题】:knex Adonis Query: Transaction query already completeknex Adonis 查询:事务查询已完成
【发布时间】:2019-12-02 17:57:23
【问题描述】:

我需要进行交易:

首先我创建一个新的 bookUnitQuestionOption,创建后我需要使用保存的 id 更新其他表(bookUnitQuestion)。

我尝试类似:

async store ({ request }){
     const bookUnitQuestionOption = {...request.all(), user_id: request.user_id};
     const trx = await Database.beginTransaction()
     const responseInsercaoOption = BookUnitQuestionOption.create(bookUnitQuestionOption, trx)
     if(bookUnitQuestionOption.correct === true)
            await this.atualizaOptionCorreta(bookUnitQuestionOption.book_unit_question_id, responseInsercaoOption.id, trx)

     trx.commit() 
}

async atualizaOptionCorreta(bookUnitQuestionId, idOpcaoPergunta, transaction){
    await BookUnitQuestion.query()
        .where('id', bookUnitQuestionId)
        .update({correct_answer_description_id :idOpcaoPergunta}, transaction);
}

但我收到 500 错误:

消息:“事务查询已经完成,使用 DEBUG=knex:tx 运行 了解更多信息”

【问题讨论】:

    标签: node.js knex.js adonis.js


    【解决方案1】:

    您在第一个查询之前缺少 await,第二个查询被跳过,因为 if 和 trx.commit() 在这种情况下在执行第一个查询之前运行。

    const responseInsercaoOption = BookUnitQuestionOption.create(bookUnitQuestionOption, trx)
    

    应该是:

    const responseInsercaoOption = await BookUnitQuestionOption.create(bookUnitQuestionOption, trx)
    

    【讨论】:

      猜你喜欢
      • 2020-04-23
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      相关资源
      最近更新 更多