I'm test driving the ES7 async/await proposal using this module to emulate it. I'm trying to make knex.js transactions play well with them, as a starting point.
Example code:
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
  }
})
How can I commit() or rollback() if a transaction succeeds or fails?
You might be able to achieve this with something similar to this
function createTransaction() {
  return new Promise((resolve) => {
    return knex.transaction(resolve);
  });
}
async function() {
  const trx = await createTransaction();
  ...
  trx.commit();
}
                        Building off of this Knex Transaction with Promises, it looks like it should be along these lines:
// 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
  }
})
                        You can try this:
async function() {
  await knex.transaction( async (trx) => {
     ...
     trx.commit();
  }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With