我使用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);
});
}
答案 0 :(得分:1)
从您的问题来看,我假设交易成功,尽管您没有获得返回值。
您丢失了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();