2016-04-15 100 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}); 
    }); 
});