首页  >  文章  >  web前端  >  如何使用'Promise.all”从 URL 数组中检索数据并创建相应的文本内容数组?

如何使用'Promise.all”从 URL 数组中检索数据并创建相应的文本内容数组?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-29 02:38:02343浏览

How can I use `Promise.all` to retrieve data from an array of URLs and create a corresponding array of text content?

利用 Promise.all 检索 URL 数组

处理 Web 请求时,从多个源检索数据可能是一项常见任务。 Promise.all 是 JavaScript 中的一个有用工具,它允许同时执行多个异步操作,并将它们的结果合并到一个 Promise 中。

问题:
想象你有一个URL 数组,旨在创建一个镜像 URL 数组结构但包含每个 URL 文本文件内容的对象。

var urls = ['1.txt', '2.txt', '3.txt']; // These files contain "one", "two", "three" respectively.
var result = ['one', 'two', 'three']; 

接近 Promise.all:
最初尝试使用 Promise.all 解决此问题时,您可能会遇到困难。让我们检查一个有缺陷的方法:

var promises = urls.map(url => fetch(url));
var texts = [];
Promise.all(promises).then(results => {
  results.forEach(result => result.text().then(t => texts.push(t)));
});

这里,Promise.all 应用于代表获取请求的 Promise 数组。但是,这种方法无法按预期生成所需的 ['一', '二', '三'] 数组。要纠正此问题,请考虑以下改进的解决方案:

Promise.all(urls.map(u => fetch(u))).then(responses =>
  Promise.all(responses.map(res => res.text()))
).then(texts => {
  …
});

此代码启动所有 URL 的获取请求,然后处理响应以检索每个 URL 的文本内容。结果是可以进一步处理的文本值数组。或者,可以使用现代 JavaScript 功能来简化代码:

const texts = await Promise.all(urls.map(async url => {
  const resp = await fetch(url);
  return resp.text();
}));

这里利用 async/await 语法来更简洁地处理异步操作。

明智地结合使用 Promise.all通过这些技术,您可以有效地从 URL 数组中获取和处理数据,为后续数据操作任务铺平道路。

以上是如何使用'Promise.all”从 URL 数组中检索数据并创建相应的文本内容数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn