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

Node.js Waterline ORM-生命周期回调-很少情况下调用失败,node.js,sails.js,waterline,Node.js,Sails.js,Waterline,我在应用程序中使用了类似的模型,要求在创建记录后,我想用新创建的记录Id更新所有者 因此,我使用afterCreate方法来做同样的事情,但是奇怪的行为是afterCreate方法在极少数情况下不会被调用。在手动创建记录时,我也有同样的行为,在mocha单元测试中也是如此注意:这种情况仅在极少数情况下发生。那么,有没有最佳实践,或者我做错了什么 我也有解决这个问题的办法。。我所做的是,在控制器操作中,我没有使用afterCreate。。但我只是想知道为什么会失败 **sample.js** mo

我在应用程序中使用了类似的模型,要求在创建记录后,我想用新创建的记录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();
    });
 }
};
您的错误如下:

if(err) {
  next(err);
}
应该是:

if(err) {
  return next(err);
}
如果不在此处使用
return
,您将调用
next()
两次,这可能会导致您的问题。

FWIW,如果
update().exec()
返回错误,您将调用
next()
回调两次,这可能会导致未定义/不需要的行为。可能不是您描述的问题的原因,但值得注意(和修复)。