如何从条件异步函数调用回调

时间:2013-05-29 03:24:58

标签: javascript node.js

鉴于此代码:

var something = function(callback) {

  if(condition) {
     Mongoose.findOne(id, function(err, doc) {
       if(doc) {
         callback(doc);
       } else {
         callback();
       }
    });
  } else {
    callback();
  }
}

我如何以更干净的方式重写它,以便在一个地方调用'回调'。我认为我可以用某种方式包装整个事情并做到这一点 - 我已经看到了它但却无法完全正确。

2 个答案:

答案 0 :(得分:1)

由于您说调用回调有复杂的步骤,请尝试以下

var something = function(callback) {
    var callCallback = function(doc){
        //do all other things you want to do to call the callback
        callback(doc);
    };

    if(condition) {
        Mongoose.findOne(id, function(err, doc) {
            if(doc) {
                callCallback(doc);
            } else {
                callCallback();
            }
        });
    } else {
        callCallback();
    }
}

答案 1 :(得分:0)

var something = function (callback) {
  var f = function (e, d) { callback(d) };

  if (condition) {
     Mongoose.findOne(id, f);
  } else {
    f();
  }
}

我的理由是,如果dfalse,那么我们仍然可以将其传递给callback,它几​​乎与传递任何参数一样。