1.投机取巧版
1 var counts=1; 2 async function aa(arg){ 3 return arg; 4 } 5 aa(counts).then((res)=>{ 6 setTimeout(function(){ 7 console.log(res) 8 setTimeout(arguments.callee,(res++)*1000) 9 },res*1000) 10 })
2.正解
js一直没有类似于sleep这种方法,因此完全可以用promise构造一个休眠函数,结合async/await就可以实现功能,这也是解决setTimeout不准确的一种方式
1 function sleep(interval){ 2 return new Promise((resolve)=> 3 setTimeout(resolve, interval); 4 }); 5 } 6 async function stepPrint(n){ 7 for(let i=0;i<=n;i++){ 8 console.log(i); 9 await sleep(i*10000); 10 } 11 } 12 stepPrint(5)