我有一個after
效用函數。
var after = function _after(count, f) {
var c = 0, results = [];
return function _callback() {
switch (arguments.length) {
case 0: results.push(null); break;
case 1: results.push(arguments[0]); break;
default: results.push(Array.prototype.slice.call(arguments)); break;
}
if (++c === count) {
f.apply(this, results);
}
};
};
下面的代碼只是工作。因爲JavaScript是單線程的。
function doWork(work) {
work(10);
work(20);
work(30);
}
WorkHandler(doWork);
function WorkHandler(cb) {
var counter = 0,
finish;
cb(function _work(item) {
counter++;
// somethingAsync calls `finish` when it's finished
somethingAsync(item, function _cb() {
finish()
});
});
finish = after(counter, function() {
console.log('work finished');
});
};
我想我應該解釋一下。
我們傳遞的是不工作的workhandler功能。
工作處理程序調用它並傳遞工作。
,做工作電話工作多次遞增計數器
自認爲做的工作函數的功能是不是異步的(非常重要)完成任務後,我們可以定義完成的功能。
正被工作的當前同步塊(其全部workhandler的執行)之前進行不能完成(並調用未定義光潔度功能)asynchronouswork已完成。
這意味着整個workhandler結束後(且變量完成設置)的異步工作職位將開始結束,並呼籲結束。只有他們所有的人都打完了,回調纔會發送到after
火。
這是值得考慮的,至少原則:HTTP://www.benjiegillam。com/2011/11/multiple-asynchronous-callbacks/ –