为什么nodejs使用forEach下载不是同步下载,使用for却可以同步下载

这是因为 JavaScript 的 Array.prototype.forEach 方法是同步的,但它不会等待回调函数的异步操作。当你在 forEach 的回调函数中使用异步操作(例如,Node.js 中的下载操作)时,forEach 会立即启动所有操作,而不会等待它们完成。map同理,返回的都是promise对象。

相反,for 循环可以与 async/await 一起使用,以便在继续下一次迭代之前等待每个异步操作完成。这就是为什么你可以使用 for 循环来同步下载。

以下是一个例子:

// 使用 forEach,这将并行启动所有下载
urls.forEach(async (url) => {
  const data = await download(url);
  console.log(data);
});

// 使用 for 循环,这将按顺序下载每个 URL
for (const url of urls) {
  const data = await download(url);
  console.log(data);
}

 

posted @ 2024-01-28 18:01  洛晨随风  阅读(69)  评论(0编辑  收藏  举报