Way*_* Ye 5 javascript asynchronous
我有一个简单的"异步"JS函数:
function asyncFunc(i) {
setTimeout(function () {
console.log(i);
}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
如果我想在for循环中执行此asyncFunc 5次,即每秒记录1 - 5次,总共花费5秒.
1
2
3
4
五
我知道jQuery的when().done()可以做到这一点但是如果我在没有第三方JS库的环境中, 实现这个的最简单和优雅的方法是什么?
实际上,例如我想编写一个接受异步函数数组的util函数,这个util函数可以逐个执行函数执行:
function execAsyncTasks([asyncTask1, asyncTask2, asyncTask3]) {
asyncTask1();
// Wait until asyncTask1 finished
asyncTask2();
// Wait until asyncTask2 finished
asyncTask3();
// Wait until asyncTask3 finished
}
Run Code Online (Sandbox Code Playgroud)
您的所有任务都必须实现某种回调机制,因为这是您知道异步任务已完成的唯一方法.有了这个,你可以这样做:
function executeTasks() {
var tasks = Array.prototype.concat.apply([], arguments);
var task = tasks.shift();
task(function() {
if(tasks.length > 0)
executeTasks.apply(this, tasks);
});
}
executeTasks(t1, t2, t3, t4);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5095 次 |
| 最近记录: |