双for循环中的settimeout

settimeout inside of double for loops

我有一个简单的字符串数组示例:
let arr = ["hello", "hello world", "hi js", "javascript"]
我只想在说 2sec
之后在控制台上打印每个单词的每个字符 所以我尝试了这个

for(let i = 0; i < arr.length; i++) {
    for(let j = 0; j < arr[i].length; j++){
        setTimeout(() => {
            let char = arr[i].charAt(j);
            console.log(char);
        }, 2000)
    }
}

但不知何故这会在 2 秒后打印所有字符
我想打印一个字符等待 2 秒然后打印另一个等等...

虽然您可以将超时持续时间乘以字符所需的时间 加上 先前单词所需的时间 - 我认为它会更容易承诺并使用 await:

let arr = ["hello", "hello world", "hi js", "javascript"]

const delay = () => new Promise(resolve => setTimeout(resolve, 500)); // replace with 2000
(async () => {
  for (const string of arr) {
    for (const letter of string) {
      console.log(letter);
      await delay();
    }
  }
})();