JavaScript中的多个条件回调

时间:2018-05-13 17:55:59

标签: javascript callback conditional-statements

我有一个异步函数,它可能调用或不调用其他异步函数,并且应该在完成所有子函数时调用它的回调函数。 我对我的想法感到不满意,觉得应该有一个更简单的方法。这样做的正确方法是什么(没有库)?

function fn(callback)
{
  let pendingOperations = 0;

  if (condition1)
  {
    ++pendingOperations;
  }

  if (condition2)
  {
    ++pendingOperations;
  }

  if (pendingOperations === 0)
  {
    callback();
  }
  else
  {
    if (condition1)
    {
      otherFunction1(() =>
      {
        if (--pendingOperations <= 0)
        {
          callback();
        }
      });
    }

    if (condition2)
    {
      otherFunction2(() =>
      {
        if (--pendingOperations <= 0)
        {
          callback();
        }
      });
    }
  }
}

1 个答案:

答案 0 :(得分:0)

使用Promises进行此类工作:

function fn(callback) {
    let promises = [];
    if (condition1) {
        promises.push(new Promise(resolve => otherFunction1(resolve)));
    }
    if (condition2) {
        promises.push(new Promise(resolve => otherFunction2(resolve)));
    }

    Promise.all(promises).then(callback);
}

如果promises为空(由于condition1condition2失败),则Promise.all(promises)返回的承诺将立即得到解决,因此callback立即打电话。