Commit/rollback 使用 async/await 的 knex 交易
Commit/rollback a knex transaction using async/await
作为起点,我正在试驾 ES7 async/await proposal using this module to emulate it. I'm trying to make knex.js 交易与它们配合得很好。
示例代码:
async function transaction() {
return new Promise(function(resolve, reject){
knex.transaction(function(err, result){
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
}
// Start transaction from this call
insert: async (function(db, data) {
const trx = await(transaction());
const idUser = await(user.insertData(trx, data));
return {
idCidUserstomer: idUser
}
})
如果交易成功或失败,我如何commit()
或rollback()
?
在此 Knex Transaction with Promises 的基础上,看起来应该遵循这些原则:
// assume `db` is a knex instance
insert: async (function(db, data) {
const trx = db.transaction();
try {
const idUser = await(user.insertData(trx, data));
trx.commit();
} catch (error) {
trx.rollback();
throw error;
}
return {
idUser: idUser
}
})
您也许可以通过类似的方式实现此目的
function createTransaction() {
return new Promise((resolve) => {
return knex.transaction(resolve);
});
}
async function() {
const trx = await createTransaction();
...
trx.commit();
}
你可以试试这个:
async function() {
await knex.transaction( async (trx) => {
...
trx.commit();
}
}
作为起点,我正在试驾 ES7 async/await proposal using this module to emulate it. I'm trying to make knex.js 交易与它们配合得很好。
示例代码:
async function transaction() {
return new Promise(function(resolve, reject){
knex.transaction(function(err, result){
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
}
// Start transaction from this call
insert: async (function(db, data) {
const trx = await(transaction());
const idUser = await(user.insertData(trx, data));
return {
idCidUserstomer: idUser
}
})
如果交易成功或失败,我如何commit()
或rollback()
?
在此 Knex Transaction with Promises 的基础上,看起来应该遵循这些原则:
// assume `db` is a knex instance
insert: async (function(db, data) {
const trx = db.transaction();
try {
const idUser = await(user.insertData(trx, data));
trx.commit();
} catch (error) {
trx.rollback();
throw error;
}
return {
idUser: idUser
}
})
您也许可以通过类似的方式实现此目的
function createTransaction() {
return new Promise((resolve) => {
return knex.transaction(resolve);
});
}
async function() {
const trx = await createTransaction();
...
trx.commit();
}
你可以试试这个:
async function() {
await knex.transaction( async (trx) => {
...
trx.commit();
}
}