Sto ottenendo l'output corretto, e infatti, queste due operazioni vengono trattate come una singola unità transazionale; dove se uno fallisce, entrambi falliscono.Knex Transaction with Promises
In questo esempio di codice: sto facendo una transazione di
(1) Inserire (2) Aggiornamento
Il modo in cui mi avvicino è quello di nido mie operazioni db all'interno del .then. La mia domanda è se questo codice è corretto per caso? Sono nuovo alle promesse e al knex.
knex.transaction(function(t) {
knex('foo')
.transacting(t)
.insert({id:"asdfk", username:"barry", email:"[email protected]"})
.then(function() {
knex('foo')
.where('username','=','bob')
.update({email:"[email protected]"})
.then(t.commit, t.rollback)
})
})
.then(function() {
// it worked
},
function() {
// it failed
});
Questo funziona, ma sento che sto ancora facendo qualcosa di sbagliato. Alla ricerca di commenti.
Puoi provare 1) l'aggiunta di alcuni console.logs dove il '// esso worked' e'// it failed' commenti sono, e 2) costringendo l'istruzione insert a fallire in qualche modo? Con il tuo annidamento corrente, il t.rollback viene chiamato solo quando l'aggiornamento fallisce, quindi immagino che non farebbe la cosa giusta se l'inserimento fallisse. – user3374348