【发布时间】:2022-01-08 01:48:09
【问题描述】:
在下面的函数中
function test1(n, delay) {
for (let i = 0; i < n; i++) {
setTimeout(() => {
console.log(i)
}, delay)
}
}
test1(3, 1000)
1秒后,我立即console.log1、2、3同时进行。
如果我将delay 乘以i,
function test1(n, delay) {
for (let i = 0; i < n; i++) {
setTimeout(() => {
console.log(i)
}, i * delay)
}
}
test1(3, 1000)
1 秒后,我在循环中的每个 i console.log。为什么会这样?
还有,为什么下面的代码
function test2(n, delay) {
let promise = new Promise(resolve => setTimeout(() => {
resolve()
}, delay))
for (let i = 0; i < n; i++) {
promise.then(console.log(i))
}
}
test2(3, 1000)
立即console.log 1、2 和 3 同时而不是每秒等待console.log 下一个i 值?有没有办法在不使用async 和await 的情况下每秒等待后使用承诺链接来console.log 下一个i 值?
【问题讨论】:
-
有多个问题,而且都是重复的。 “有没有办法在不使用 async 和 await 的情况下,在每秒等待后控制台记录下一个 i 值?”:stackoverflow.com/a/70213768/16540390
标签: javascript algorithm