forEach() 和 forOf() 和 async/await?

forEach() with forOf() with async/await?

提问人:xaviour1504 提问时间:7/5/2023 更新时间:7/5/2023 访问量:56

问:

我在异步打字机上制作这个程序?每行异步键入的位置? 这是我的html

<h1 data-type data-type-min="100" data-type-max="300">How are you</h1>
 <h2 data-type data-type-min="20" data-type-max="80">What are you doing?Lorem ipsum dolor sit amet. </h2>
  <h3 data-type>whats up?</h3>

这是我的JS 这是我对 aync 键入的回调-

async function draw(el) {
  const text = el.textContent;
  let soFar = '';
  for (const letter of text) {
    soFar += letter;
    el.textContent = soFar;
    await wait(1000);
  }
}

在这里,我使用 forEach 方法附加此回调。

document.querySelectorAll('[data-type]').forEach(draw);

我不明白为什么这 3 行没有同时开始打字。第一行和第三行首先开始打字,然后过了一段时间,第二行开始打字。这个回调是如何工作的?

JavaScript 异步 async-await foreach 回调

评论

0赞 Efros Ionelu 7/5/2023
你没有 await after for 语句, for await(const letter of text) { soFar += letter; el.textContent = soFar; await wait(1000); }
0赞 xaviour1504 7/5/2023
现在,启动整个输出需要一些时间。
1赞 Tamil Vendhan Kanagarasu 7/5/2023
当前代码按预期工作。可能是您遇到了问题,因为您的应用程序中可能运行了其他事件,这些事件会延迟 setTimeout 调用。使用 setTimeout 时,它不会在提供的确切毫秒内调用给定的函数。唯一的保证是它不会在给定的毫秒之前调用回调。一旦经过毫秒,回调将被移动到某个队列,如果有其他一些 DOM 处理正在发生或有许多其他回调,它将在那里等待。wait
0赞 trincot 7/5/2023
无法重现。请提供确切的代码以重现问题。
0赞 Bergi 7/5/2023
@EfrosIonelu 不,你不应该在这里使用。没有异步生成器,只是一个字符串上的循环。for await

答: 暂无答案