代码块是
if (completed >= arr.length) {
return callback();
}
它在函数_eachLimit 中。
我的想法是由于JavaScript是单线程的,迭代器函数的参数列表中的回调函数一次只能执行一次,所以完成变量不能同时被两个回调函数修改的情况。如果是这样,当回调函数被调用时,它会每次检查完成的变量,以便它可以结束while循环。
而且上面的代码块好像是多余的,那么代码块有什么用呢?
非常感谢您回答我的问题。
整个函数如下:
var _eachLimit = function (limit) {
return function (arr, iterator, callback) {
callback = callback || function () {};
if (!arr.length || limit <= 0) {
return callback();
}
var completed = 0;
var started = 0;
var running = 0;
(function replenish () {
if (completed >= arr.length) {
return callback();
}
while (running < limit && started < arr.length) {
started += 1;
running += 1;
iterator(arr[started - 1], function (err) {
if (err) {
callback(err);
callback = function () {};
}
else {
completed += 1;
running -= 1;
if (completed >= arr.length) {
callback();
}
else {
replenish();
}
}
});
}
})();
};
};