Я использую Node 7.6.0, который поддерживает async/await. Клиентский пул node-postgres поддерживает async/await и имеет хороший пример здесь. Однако в примере для транзакций в node-postgres (здесь) используются обратные вызовы вместо асинхронно/ожидание. Несмотря на этот пример, я решил попробовать транзакции с async/await в быстром тесте:
let client = null;
try {
client = await this.pool.connect();
} catch (error) {
console.log('A client pool error occurred:', error);
return error;
}
try {
await client.query('BEGIN');
await client.query('UPDATE foo SET bar = 1');
await client.query('UPDATE bar SET foo = 2');
await client.query('COMMIT');
} catch (error) {
try {
await client.query('ROLLBACK');
} catch (rollbackError) {
console.log('A rollback error occurred:', rollbackError);
}
console.log('An error occurred:', error);
return error;
} finally {
client.release();
}
return 'Success!';
Кажется, это работает просто отлично, но мне сказал участник node-postgres что это плохая идея. К сожалению, он не стал объяснять, почему это плохая идея, — он просто сказал искать ответ на Stack Overflow.
Почему плохая идея выполнять транзакции с помощью async/await вместо обратных вызовов в node-postgres?