Ria Anggraini
Ria Anggraini

Reputation: 2655

knex transaction is not working with async await

im workin with knex and node, when im trying to use transaction its not working and trhowing following error Unhandled rejection TypeError: container is not a function, i dont know why what happend, anyone know whats wrong with my syntax or knowing better syntax?

  const insertData = async (tableName, data) => {
	try {
		return knex(tableName)
			.insert(data);
	
	} catch (err) {
		logger.error('error function insertData :global model', err);
		return false;
	}
};
  

const createAccount= async (dataAddress, dataAccount) => {
	let trx = knex.transaction();
	try {
		const insertDataAddress = await insertData('mdm_address_contact', dataAddress);
		await global.insertData('mdm_account1', Object.assign({ id_address: insertDataAddress[0] }, dataAccount));
		trx.commit();
		return true;
	} catch (err) {
		trx.rollback(err)
		logger.error('error in function create account, mdm address contact:model', err);
		return false;
	}
};

Upvotes: 0

Views: 2327

Answers (1)

Mikael Lepistö
Mikael Lepistö

Reputation: 19718

There were various errors in the code, something like this should work a bit better (this code too still looks horrible though):

const insertData = async (tableName, data) => {
  try {
    return await knex(tableName).insert(data);
  } catch (err) {
    logger.error('error function insertData :global model', err);
    throw err;
  }
};

const createAccount = async (dataAddress, dataAccount) => {
  try {
    return await knex.tranasaction(async trx => {
      const insertDataAddress = await insertData('mdm_address_contact', dataAddress);
      await insertData('mdm_account1', Object.assign({ id_address: insertDataAddress[0] }, dataAccount));
    });
  } catch (err) {
    logger.error('error in function create account, mdm address contact:model', err);
    throw err;
  }
};

Upvotes: 1

Related Questions