2016-04-15 103 views
3

我能如何使用交易T,我想保存記錄之前,以確保該行是成功的刪除:交易收集

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}); 
}); 

回答

2

你可能只需要使用書架的transaction()方法。

但首先您的save()必須在destroy()承諾的上下文中,以確保正確的序列,否則您可能會使保存的數據也被銷燬刪除。

所以它可能看起來像:

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}); 
    }); 
});