Q承诺使用空闲回调排队

时间:2014-08-26 13:14:19

标签: javascript promise q

我使用Q创建了一个后台任务队列:

function enq (step)
  var f = function() {
    var d = Q.defer();
    step(d);
    return d.promise;
  }
  enq_head = enq_head.then(f);
  handleBusiness(); //see later
}

其中enq_head是全球性的推广。 step参数是任务,它履行承诺。

现在我想在此队列在busy和idle之间切换时调用回调。我能想到的最好的是:

function handleBusiness() {
  if (!businessCallback) {
    return 0;
  }
  var busynow = enq_head.isPending();
  if (busynow) {
    businessPromise = enq_head.then(handleBusiness);
  }
  if (busynow != businessReported) {
    businessReported = busynow;
    if (businessCallback) {
      businessCallback(businessReported); 
    }
  }
  return 0;
}

但它看起来很乱,而且性能很糟糕,因为如果它通常很忙,每次添加新任务时我都需要两个.thens。

内置的内容会更好吗?

0 个答案:

没有答案