托收交易

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