下面代码怎么分别使用Promise和async改写成每隔1s打印1个数字的形式?

作者站长头像
站长
· 阅读数 10

分别使用Promise和async改写成每隔1s打印1个数字的形式

function print(n){
    for(var i = 0;i <n;i++){
        setTimeout(console.log, 1000, i);
    }
}
print(10);
回复
1个回答
avatar
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)
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容