收集交易

时间:2016-04-15 05:43:25

标签: bookshelf.js knex.js

如何使用transacting 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});
});

1 个答案:

答案 0 :(得分:3)

您可以使用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});
    });
});