Node.js Waterline ORM - 生命周期回调 - 在极少数情况下调用失败

时间:2015-04-12 10:25:45

标签: node.js sails.js waterline

我在我的应用程序中使用与此类似的模型,并且要求是在创建记录之后,我想用新创建的记录ID更新所有者

所以我使用 afterCreate 方法做同样的事情,但奇怪的行为是 afterCreate 方法在极少数情况下不会被调用。我在手动创建记录时也有相同的行为,也在mocha单元测试中。 注意:这种情况仅在极少数情况下发生。那么,有没有最好的做法,或者我做错了什么?

我也为此提供了解决方案。我所做的是,而不是使用 afterCreate 我在控制器操作中做同样的事情。但只是期待知道为什么会失败?

**sample.js**
module.exports = {

schema: true,

attributes: {

    name: {
        type: 'string',
        required: true
    },

    owner : {
       model: 'sample' 
    }
},

afterCreate : function(values, next) {
    sample.update({id:values.id},
                  {owner: values.id})
          .exec(function(err, result){

        if(err){
            next(err);
        }

    next();
    });
 }
};

1 个答案:

答案 0 :(得分:1)

您的错误在这里:

if(err) {
  next(err);
}

应该是:

if(err) {
  return next(err);
}

在此处未使用return,您将两次调用next(),这可能会导致您的问题。