Ich benutze den Knoten 7.6.0, der async/await unterstützt. Der Node-Postgres-Client-Pool unterstützt async/await und hat ein schönes Beispiel here. Das Beispiel für Transaktionen in node-postgres (here) verwendet jedoch Rückrufe anstelle von async/await. Trotz dieses Beispiel, ich dachte, ich Transaktionen mit Asynchron versuchen würde/erwarten in einem Schnelltest:Node-Postgres-Transaktionen mit Callbacks oder async/erwarten?
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!';
Das scheint ganz gut zu funktionieren, aber I was told von einem Knoten-Postgres Bewerters, dass dies eine schlechte Idee ist. Leider hat er sich nicht die Zeit genommen zu erklären warum das ist eine schlechte Idee-er sagte nur, um eine Antwort auf Stack Overflow zu suchen.
Warum ist es eine schlechte Idee, Transaktionen mit async/await statt Callbacks in Node-Postgres durchzuführen?
Es ist keine schlechte Idee, wenn Sie die Logik für die Erstellung einer Transaktion in eine andere Funktion, und vitaly-t bewegen will nur eine Entschuldigung seiner Bibliothek zu fördern. Ignoriere den Kommentar. – Ryan