나는 이런 종류의 사용하는 경향이 :
function TaskList(tasks, endOfTasksCallback) {
this.doTasks = function() {
var numTasks = tasks.length;
function singleTaskCallback() {
if (--numTasks == 0) {
endOfTasksCallback();
}
}
for (var i = 0; i < tasks.length; i++) {
tasks[i](singleTaskCallback);
}
}
}
function createTask(taskIdx) {
// a task is a function that does some work
// for this demo it's simply a random wait
return function (endOfTaskCallback) {
var ms = Math.floor(Math.random() * 1000 * 5);
var startTime = new Date().getTime();
setTimeout(function() {
var endTime = new Date().getTime();
console.log("task " + taskIdx + " completed in " + (endTime-startTime) + "ms.");
endOfTaskCallback();
}, ms);
}
}
var numTasks = 10;
var tasks = [];
for (var i = 0; i < numTasks; i++) {
tasks.push(createTask(i));
}
new TaskList(tasks, function() {
console.log("all done!");
}).doTasks();
을하고이 같은 출력을 얻을 :
task 3 completed in 215ms.
task 5 completed in 1365ms.
task 2 completed in 2020ms.
task 4 completed in 2360ms.
task 0 completed in 2595ms.
task 6 completed in 2940ms.
task 9 completed in 3220ms.
task 1 completed in 3515ms.
task 8 completed in 3560ms.
task 7 completed in 4845ms.
all done!