knex транзакция не работает с асинхронным ожиданием - PullRequest
0 голосов
/ 23 апреля 2019

я работаю с knex и node, когда я пытаюсь использовать транзакцию, она не работает и выводит следующую ошибку Unhandled rejection TypeError: container is not a function, я не знаю, почему так случилось, кто-нибудь знает, что не так с моим синтаксисом или знает лучший синтаксис?

  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;
	}
};

1 Ответ

1 голос
/ 24 апреля 2019

В коде были различные ошибки, что-то вроде этого должно работать немного лучше (хотя этот код все еще выглядит ужасно):

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;
  }
};
...