由于ES7有更好的方法来等待循环:
// Returns a Promise that resolves after "ms" Milliseconds
const timer = ms => new Promise(res => setTimeout(res, ms))
async function load () { // We need to wrap the loop into an async function for this to work
for (var i = 0; i < 3; i++) {
console.log(i);
await timer(3000); // then the created Promise can be awaited
}
}
load();
当引擎到达部件时,它会设置超时并暂停异步函数
的执行。然后,当超时完成时,执行将在该点继续。这非常有用,因为您可以延迟(1)嵌套循环,(2)有条件地延迟,(3)嵌套函数:await
async function task(i) { // 3
await timer(1000);
console.log(`Task ${i} done!`);
}
async function main() {
for(let i = 0; i < 100; i+= 10) {
for(let j = 0; j < 10; j++) { // 1
if(j % 2) { // 2
await task(i + j);
}
}
}
}
main();
function timer(ms) { return new Promise(res => setTimeout(res, ms)); }
MDN上的参考
虽然NodeJS和现代浏览器现在支持ES7,但您可能希望使用BabelJS对其进行转译,以便它可以在任何地方运行。