knex Adonis查询:交易查询已经完成

时间:2019-12-02 17:57:23

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

我需要进行交易:

首先,我创建一个新的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运行   以获得更多信息”

1 个答案:

答案 0 :(得分:0)

在第一个查询之前您没有等待,第二个查询被跳过,因为在这种情况下,如果if和trx.commit()在执行第一个查询之前就运行了。

const responseInsercaoOption = BookUnitQuestionOption.create(bookUnitQuestionOption, trx)

应为:

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