gpt4 book ai didi

mysql - 如何使用 knex.js 使用事务

转载 作者:行者123 更新时间:2023-11-29 02:42:51 30 4
gpt4 key购买 nike

我已经使用 knex 在数据库表中输入了多个记录,但我没有任何反应。我的代码如下:

  addApi : (data,CustomerId) => {
knex.transaction(function(trx) {
knex('books').transacting(trx).insert({name: 'Old Books'})
.then(function(resp) {
var id = resp[0];
return someExternalMethod(id, trx);
})
.then(trx.commit)
.catch(trx.rollback);
})
.then(function(resp) {
console.log('Transaction complete.');
})
.catch(function(err) {
console.error(err);
});
}

最佳答案

从你的问题来看,我假设交易是成功的,尽管你没有得到返回值。

您正在丢失您的 return someExternalMethod(id, trx); 响应值。相反,您得到的是 .then(trx.commit) 的响应值。您在 console.log('Transaction complete.'); 代码部分再次执行相同操作。

试试这个(编辑:代码现在已经过测试):

function testIt() {
const knex = require("knex")(dbcfg); // you will need your configuration

function createBooksTable(table) {
table.increments('id');
table.string('name', 128);
};

function someExternalMethod(id, trx) {
console.log("DBG02 .someExternalMethod Executed.");
return [id];
}

function insertBooksRec() {
return knex.transaction(function(trx) {
knex('books').transacting(trx).insert({name: 'Old Books'})
.then(function(resp) {
var id = resp[0];
return someExternalMethod(id, trx);
})
.then(function(extMethodReturn) {
// return the value from the above .then
console.log('DBG03 .extMethodReturn Returns:', extMethodReturn);
return trx.commit()
.then(function() {
console.log('DBG04 .extMethodReturn Returns:', extMethodReturn);
return extMethodReturn;
});
})
.catch(trx.rollback)
.then(function(resp) {
console.log('DBG99 Insert Transaction complete. Returns:', resp);
return resp; // if you want the value returned.
})
.catch(function(err) {
console.error('DBG89 Insert Transaction ERROR:', err);
});
});
};

let tbl = knex.schema.createTableIfNotExists("books", createBooksTable)
.then(function() {
console.log('DBG01 BOOKS Table Creation complete:');
})
.catch(function(err) {
console.error("DBG81 ERROR creating books table:", err);
})
.then(function() {
return insertBooksRec()
});

};
testIt();

关于mysql - 如何使用 knex.js 使用事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47778088/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com