处理 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中文网其他相关文章!