下面代码怎么分别使用Promise和async改写成每隔1s打印1个数字的形式?
分别使用Promise和async改写成每隔1s打印1个数字的形式
function print(n){
for(var i = 0;i <n;i++){
setTimeout(console.log, 1000, i);
}
}
print(10);
回复
1个回答

test
2024-07-10
async/await:
const sleep = t => new Promise(res => setTimeout(res, t))
const print = async n => {
for (let i = 0; i < n; i ++) {
console.log(i)
await sleep(1000)
}
}
纯 Promise(有必要吗?)
const print = n => Array(n).fill().reduce((p, _, i) => p.then(() => new Promise(res => {
console.log(i)
setTimeout(res, 1000)
}, Promise.resolve())
也不用 Promise
const print = (n, i = 0) => {
if (i === n) return
console.log(i)
setTimeout(() => print(n, i + 1), 1000)
}
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容