托收交易
Transaction for collection
如何使用事务处理 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});
});
您可以使用 Bookshelf 的 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});
});
});
如何使用事务处理 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});
});
您可以使用 Bookshelf 的 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});
});
});