如何使用promise计数



我想计数一些数字使用承诺的结果是1,2,3,完成,我已经编码它像这样

const state = true
const count = new Promise((resolve, reject) => {
if (state) {
resolve("counter work")
for (let i = 1; i <= 3; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}
console.log("done");
} else {
reject("counter not work")
}
})
count
.then((response) => console.log("success", response))
.catch((response) => console.log("failed", response));

,结果是:done,1,2,3,但我想要的结果是1,2,3,done

有谁能告诉我为什么我的代码会有这样的结果,以及代码应该怎么做吗?

把前期的化解放在一边,把原因"做完了";首先记录的是你在循环中调用setTimeoutsetTimeout不阻塞执行,它在一段时间后排队等待回调并立即返回。所以你只是创建了三个超时,它们会在你退出循环并记录"完成"后的一秒钟内触发。

创建定时器,可以在回调中有条件地调用setTimeout:

new Promise((resolve, reject) => {
let i = 0
function increment () {
i++
console.log(i)
if (i < 3) {
setTimeout(increment, 1000)
} else {
console.log('done')
resolve() // to mark the promise as completed
}
}
setTimeout(increment, 1000)
})

相关内容

  • 没有找到相关文章

最新更新