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)