【问题标题】:knex transaction is not working with async awaitknex 事务不适用于异步等待
【发布时间】:2019-04-23 09:45:59
【问题描述】:

我正在使用 knex 和节点,当我尝试使用事务时它不工作并且出现以下错误 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;
	}
};

【问题讨论】:

标签: javascript mysql transactions knex.js


【解决方案1】:

代码中有各种错误,像这样的东西应该会更好一些(虽然这段代码看起来仍然很糟糕):

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

【讨论】:

  • 我试试看,谢谢,会确认它是否有效:)
猜你喜欢
  • 1970-01-01
  • 2018-09-13
  • 2018-06-22
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多