Antarmuka berbasis janji seperti pg-promise adalah cara untuk pergi:
var bluebird = require('bluebird');
var pgp = require('pg-promise')({
promiseLib: bluebird
});
var db = pgp(/*connection details*/);
db.tx(t => {
// BEGIN executed
return t.map('SELECT id, chain FROM mytable where state_ready = $1 and transaction_id = $2', [true, 123], a => {
var chain = data.chain;
var pg_record = data.id;
return t.none('UPDATE mytable SET transaction_id = $1::text where id=$2::int', [transactionHash, pg_record]);
}).then(t.batch); // settling all internal queries
})
.then(data => {
// success, COMMIT executed
})
.catch(error => {
// error, ROLLBACK executed
})
.finally(pgp.end); // shuts down the connection pool
Contoh di atas melakukan persis seperti yang Anda minta, ditambah lagi menggunakan transaksi. Tetapi pada kenyataannya Anda ingin melakukan semuanya dalam satu permintaan, untuk alasan kinerja;)
Lihat contoh lainnya .