如果我想使用setTimeout和delay = Math.random() * 1000打印从1到10的数字。
由于异步编程和事件循环,答案将是随机数从1到10的数字。

我想要的是按与上述相同的延迟按递增顺序打印数字。这可以通过Promises或Async模块来完成。我的意思是说,它应该只打印一次数字1,然后再打印2,依此类推。

任何帮助,将不胜感激。

注意:请不要给出答案,例如增加时间到变量并将该变量用作延迟。

最佳答案

您可以使用Promisesasync/await这样执行



// returns a promise that resolves after the specified number of ms
function delay(ms) {
    return new Promise(resolve => {
        setTimeout(resolve, ms);
    });
}

// function that will print the numbers in correct order, with delays
async function print(num) {
    for (let i = 1; i <= num; i++) {

        await delay(Math.random() * 1000); // wait

        console.log(i); // print number
    }
}

print(10); // actually execute function





实际打印数字的函数是async函数,它使用基于在指定的毫秒数后解析的承诺的延迟。

关于javascript - 如何使用async或promises与setTimeout添加随机延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45010012/

10-17 01:25