2017-04-11 4 views
5

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?

+1

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

Antwort