javascript 异步/等待数组中的循环项[重复]

xyhw6mcr  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(93)
    • 此问题在此处已有答案**:

(33个答案)
How do I add a delay in a JavaScript loop?(32个答案)
昨天关门了。
我想知道在数组上循环并在元素上使用async/await来执行任务的最佳方法是什么。作为语言的新手,我还没有找到一个明确的答案,或者我不理解解决方案(使用Promise. all with和map方法?)
这是代码。renderCountry不是一个异步函数,但是发生这种情况的函数是一个异步函数。我做的方法正确吗?如果不正确,我应该如何实现它?我只是想确保代码在数组元素上循环时是非阻塞的。
Code

if (neighboursArr) {
  neighboursArr.forEach(async (el, i) => {
    await wait(i * 300);
    const neighbourRes = await fetch(
      `https://restcountries.com/v3.1/alpha/${el}`
    );
    const neighbourData = await neighbourRes.json();
    renderCountry(neighbourData[0], "neighbour");
  });
} else {
  renderMessage("It is lonely island :)");
}
j91ykkif

j91ykkif1#

好吧,不管你的具体代码如何,在关注你在第一段中提出的主要问题的同时,我设计了一种异步迭代的方法:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms))
const inc = async i => (await delay(500), ++i)

const foo = async () => {
  for(let i = 1; i <= 5; i = await inc(i)) 
    console.log(i) // prints 1, 2, 3, 4, 5 with a delay 
}

foo()

以上代码来自我的Github gist

相关问题