6

我有猫鼬更新电话,想传递一个额外的参数......像这样:

试图通过isLoopOver

UserInfo.update({_id: userInfo._id}, {'value': someval}, function(err, numAffected, isLoopOver ) {
    console.log('IsLoopOver ' + JSON.stringify(isLoopOver) );
    if (isLoopOver){
        doSomething(isLoopOver);
    }
});

尝试了上述方法,但我得到了一个对象(在回调内),如下所示:

{"updatedExisting":true,"n":1,"connectionId":117,"err":null,"ok":1}

不知道为什么它显示来自 mongo 的状态。

问题:如何通过回调传递额外的参数?

4

2 回答 2

9

常见的方法是:

var isLoopOver = false;
UserInfo.update({_id: userInfo._id}, {'value': someval}, function(err, numAffected) {
    console.log('IsLoopOver ' + JSON.stringify(isLoopOver) );
    if (isLoopOver){
        doSomething(isLoopOver);
    }
});

如果您担心某些代码会在调用 的回调函数isLoopOver之前更改值update,请使用以下代码:

(function (isLoopOver) {
  UserInfo.update({_id: userInfo._id}, {'value': someval}, function(err, numAffected) {
      console.log('IsLoopOver ' + JSON.stringify(isLoopOver) );
      if (isLoopOver){
          doSomething(isLoopOver);
      }
  });
}(isLoopOver));

isLoopOver您的变量显示来自 mongo 的状态的原因是在回调函数中,isLoopOver是形式参数而不是实际参数。

于 2013-06-02T04:44:53.127 回答
6

您可以使用下划线的部分功能

UserInfo.update(..., _.partial(function( isLoopOver, err, numAffected ) {
}, isLoopOver ))
于 2013-06-02T01:46:21.180 回答