@vetsmen

Почему после вызова функции не выполняется остальной код?

Есть модуль для работы с транзакциями на mysql:
exports.prepareTransaction = () => {
    return new Promise((resolve, reject) => {
        pool.getConnection((err, connection) => {
          if (err) throw err;

          const query = promisify(connection.query).bind(connection);
          const commit = promisify(connection.commit).bind(connection);
          const rollback = promisify(connection.rollback).bind(connection);
          const beginTransaction = promisify(connection.beginTransaction).bind(connection);
          const release = promisify(connection.release).bind(connection);

          resolve({beginTransaction, query, commit, rollback, release});
        });
    });
};


При закрытии соединения:
let transaction = await connection.prepareTransaction();	

try {
	await transaction.beginTransaction();
	...
	await transaction.commit();
	await transaction.release();
	// дальше код не выполняется никакой
}

Никакой код дальше не выполняется, даже нельзя сделать return. Почему так? И как решить проблему?
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
IvanBlacky
@IvanBlacky
back-end разработчик
Видимо, промис transaction.release()
никогда не становится fullfilled, поэтому await не завершается.

Попробуйте переписать на Promise и посмотрите, выполняется ли что-нибудь в блоке then или catch.

Пример
let transaction = await connection.prepareTransaction();	

try {
  await transaction.beginTransaction();
  ...
  await transaction.commit();
  transaction.release()
    .then(res=>{
      console.log(res);
     })
    .catch(err=>{
      console.error(err);
    });
}

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы