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

How to call a callback from a conditional async function

本文关键字:函数调用 回调 异步 条件      更新时间:2023-09-26

给定以下代码:

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

我如何用一种更干净的方式重写它,这样'callback'只在一个地方被调用。我假设我可以把这整个东西包装起来——我看到过,但不能完全正确。

既然您说调用回调有复杂的步骤,请尝试下面的

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();
    }
}
var something = function (callback) {
  var f = function (e, d) { callback(d) };
  if (condition) {
     Mongoose.findOne(id, f);
  } else {
    f();
  }
}

我的理由是,如果dfalse,那么我们仍然可以将其传递给callback,这几乎等同于不传递任何参数。