【问题标题】:Node.js Waterline ORM - lifecycle callbacks - invoke fails in rare casesNode.js Waterline ORM - 生命周期回调 - 在极少数情况下调用失败
【发布时间】:2015-04-12 10:25:45
【问题描述】:

我在我的应用程序中使用了与此类似的模型,并且要求在创建记录后,我想用新创建的记录 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();
    });
 }
};

【问题讨论】:

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

标签: node.js sails.js waterline


【解决方案1】:

你的错误在这里:

if(err) {
  next(err);
}

应该是:

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

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

【讨论】:

    猜你喜欢
    • 2013-10-25
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多