2016-04-15 11 views
3

Wie kann ich trans t tun verwenden, möchte ich sicherstellen, dass die Reihe erfolgreich entfernen, bevor der Datensatz gespeichert:Transaktion für die Sammlung

var Roles = bookshelf.Collection.extend({ 
    model: Role 
); 

Role.where('name', '=', 'Staff').destroy(); 

var roles = Roles.forge([{name: 'Staff'}, {name: 'Guest'}]); 

Promise.all(roles.invoke('save')).then(function(role) { 
    resolve(role); 
}).catch(function (err) { 
    reject({"status":"error", "data": err}); 
}); 

Antwort

2

Sie haben soeben transaction() Methode Bibliothek des verwenden.

Aber zuerst Ihre save() MUSS im Zusammenhang mit der destroy() Versprechen sein, so dass die richtige Reihenfolge sicherzustellen, sonst riskieren Sie Ihre gespeicherten Daten auch durch die Zerstörung gelöscht werden.

So kann es wie folgt aussehen:

var Roles = bookshelf.Collection.extend({ 
    model: Role 
}); 

bookshelf.transaction(function(t) { 
    return Role 
    .where('name', '=', 'Staff') 
    .destroy({transacting: t}) 
    .then(function() { 
     var roles = Roles.forge([{name: 'Staff'}, {name: 'Guest'}]); 
     return roles 
     .invokeThen('save', null, {transacting: t}); 
    }); 
});