मैन्युअल लेन-देन प्रबंधन एक विश्वासघाती रास्ता है, उससे दूर जाने की कोशिश करें!;)
पीजी-वादा की सहायता से इसे ठीक से करने का तरीका यहां दिया गया है:
function(req, res) {
db.tx(t => { // automatic BEGIN
return t.one('INSERT_1 VALUES(...) RETURNING id', paramValues)
.then(data => {
var q = t.none('INSERT_2 VALUES(...)', data.id);
if (req.body.value != null) {
return q.then(()=> t.none('INSERT_3 VALUES(...)', data.id));
}
return q;
});
})
.then(data => {
res.send("Everything's fine!"); // automatic COMMIT was executed
})
.catch(error => {
res.send("Something is wrong!"); // automatic ROLLBACK was executed
});
}
या, यदि आप ES7 सिंटैक्स पसंद करते हैं:
function (req, res) {
db.tx(async t => { // automatic BEGIN
let data = await t.one('INSERT_1 VALUES(...) RETURNING id', paramValues);
let q = await t.none('INSERT_2 VALUES(...)', data.id);
if (req.body.value != null) {
return await t.none('INSERT_3 VALUES(...)', data.id);
}
return q;
})
.then(data => {
res.send("Everything's fine!"); // automatic COMMIT was executed
})
.catch(error => {
res.send("Something is wrong!"); // automatic ROLLBACK was executed
});
}
अपडेट करें
ES6 जनरेटर को ES7 async
. से बदला गया /await
उदाहरण में, क्योंकि pg-promise ने संस्करण 9.0.0