使用...在JavaScript中的同步和异步数组进行迭代...
#javascript #async #for #sync

ðð»异步编程在处理耗时的操作(例如从API中获取数据,阅读文件或处理延迟)时,在JavaScript中至关重要。 ES6提出了更优雅处理异步任务的承诺。

随后,ES2018引入了循环的for等待...在使用异步效果(如承诺或发电机)时,它进一步简化了异步数据。

在这篇博客文章中,我们将探讨如何在同步和异步阵列上迭代迭代。

示例:异步阵列

考虑一个示例,我们有一个延迟数组,我们想对数组中的每个延迟执行异步任务。

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

const createDelays = [1000, 2000, 500, 3000, 5000, 10000, 100].map(ms => delay(ms));

const asyncIterable = createDelays;

(async () => {
  for await (const delayTime of asyncIterable) {
    console.log(`Waited for ${delayTime} milliseconds.`);
  }
  console.log("All delays processed.");
})();

在此示例中,我们定义了返回承诺的延迟函数,并模拟异步延迟。然后,我们创建一个异步数组CreateLays,其中包含在不同延迟后解决的承诺。在等待着...,我们可以在转到下一个项目之前迭代异步和等待每个诺言的决议。这确保了每个延迟被顺序处理。

示例:同步阵列

现在,让我们考虑一个示例,其中我们有一系列延迟,并希望对数组中的每个延迟执行同步任务。

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function processDelays(delays) {
  for await (const delayTime of delays) {
    await delay(delayTime);
    console.log(`Waited for ${delayTime} milliseconds.`);
  }
  console.log("All delays processed.");
}

const delaysArray = [1000, 2000, 500, 3000, 5000, 10000, 100];
processDelays(delaysArray);

在此示例中,我们定义与上一个示例类似的延迟功能。函数ProcessDelays需要一系列延迟,并使用它们进行等待...的迭代。尽管阵列是同步的,但由于内部的等待,循环变得异步。这使我们能够异步处理每个延迟,一个接一个地处理。

示例:混合阵列与异步操作

function fetchData(data) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(`Data: ${data}`);
    }, Math.random() * 5000); // Simulate a random delay up to 5000 ms (5 seconds).
  });
}

async function processArrayWithAsyncOperations(dataArray) {
  for (const data of dataArray) {
    const result = await fetchData(data);
    console.log(result);
  }
  console.log("All operations processed.");
}

const dataArray = [1, 2, 3, 4, 5];
processArrayWithAsyncOperations(dataArray);

在此示例中,我们定义了fetchdata函数,该函数模拟数据以随机延迟的方式异步。函数processArrayWithAsyncoperations在dataArray上迭代使用...即使数据获取本身是异步的,循环由于等待语句而依次处理每个项目。

结论

我们涵盖了的用法,等待... 在同步和异步阵列上迭代。该循环使我们能够优雅地处理异步数据,从而确保每个项目的顺序处理。无论您是使用纯粹的异步数据,纯同步数据,还是两者的混合在一起,等待...提供了一种强大的工具,可以轻松地在现代JavaScript中轻松处理异步任务。

您可以看到行动中的代码replit.com

ð»ð»ð