我使用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。
内置的内容会更好吗?