JavaScript:一个一个地执行异步函数

标签 javascript asynchronous

我有一个简单的“异步”JS 函数:

function asyncFunc(i) {
    setTimeout(function () {
        console.log(i);
    }, 1000);
}

如果我想在一个 for 循环中执行这个 asyncFunc 5 次,即每秒记录 1 - 5 次,总共花费 5 秒。

1

2

3

4

5

我知道 jQuery 的 when().done() 可以做到这一点,但是如果我在没有第 3 方 JS 库的环境中,实现此目的的最简单优雅的方法是什么

实际上,例如我想写一个 util 函数,它接受一个异步函数数组,这个 util 函数可以一个一个地执行传入的函数:

function execAsyncTasks([asyncTask1, asyncTask2, asyncTask3]) {
    asyncTask1();
    // Wait until asyncTask1 finished
    asyncTask2();
    // Wait until asyncTask2 finished
    asyncTask3();
    // Wait until asyncTask3 finished
}

最佳答案

您的所有任务都必须实现某种回调机制,因为这是您知道异步任务已完成的唯一方式。有了它,您可以执行以下操作:

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);

Demo

关于JavaScript:一个一个地执行异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13583280/

相关文章:

javascript - 如何使用 javascript 克隆 SVG 元素?

javascript - 无法使用 'roles' 包向 meteor 用户添加角色

javascript - "Input type file.files"选择器在 jQuery 中不起作用

c# AsyncSocket 服务器需要锁定?

.net - 异步 wcf 服务 - 需要显式调用 open() 吗?

java - 如何使用来自外部客户端的异步进程?

javascript - getMinutes() 0-9 - 如何显示两位数字?

javascript - 使用其他对象的键查找对象中的键/值

Scala future 基础知识

javascript - Azure Javascript - 等待函数完成