【发布时间】:2022-12-15 14:16:56
【问题描述】:
let data = document.querySelector(".data");
let arr = ["Hello", "Random", "Word"];
for (let i = 0; i < arr.length; i++) {
for (let k = 0; k < arr[i].length; k++) {
setTimeout(() => {
console.log(arr[i][k]);
}, 1000);
}
}
我想要的是先打印 H,然后在第二个 E 之后,然后在 sec L 之后,然后在 sec L 之后,依此类推。但是我所有的信件都被单独打印出来
“H”
“电子”
“我”
“我”
.
.
.
一秒钟后全部在一起,而不是一个接一个。
第二个 for 循环不应该等待一秒钟然后打印它们吗?
【问题讨论】:
-
您正在调用 15 个一秒超时,但您是同时调用它们。
-
因为所有的超时实际上都是在同一时间开始的,然后它们都会同时被触发。
-
您的循环在 10 毫秒内结束。所以你几乎是在瞬间添加 1s 超时。请改用
1000 * (i+k) -
@RobbyCornelissen 我刚刚意识到 setTimeout 是异步的。我怎样才能得到想要的效果?
-
@phuzi 刚刚意识到 setTimeout 是异步的。我怎样才能得到想要的效果?
标签: javascript