ðð»异步编程在处理耗时的操作(例如从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
ð»ð»ð