首页 > web前端 > js教程 > Promise.all 如何简化异步 URL 获取以提高效率?

Promise.all 如何简化异步 URL 获取以提高效率?

DDD
发布: 2024-10-28 04:36:30
原创
437 人浏览过

How can Promise.all Streamline Asynchronous URL Fetching for Enhanced Efficiency?

异步 URL 获取:利用 Promise.all 提高效率

Promise.all 实用程序是并发执行序列的关键手段异步任务。开始获取 URL 数组的任务时,我们的目标是获得封装相应文本内容的类似数组。在深入研究这一努力之前,有必要对某些尝试方法的缺点进行反思。

下面的代码片段在尝试实现我们的目标时,未能达到目标:

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

首先,这个实现在概念上是有缺陷的,因为 forEach 函数既不返回数组也不返回承诺,使其无效。其次,代码缺乏必要的嵌套来适当处理文本提取的异步性质。

要纠正这些缺点,需要采取多方面的方法。我们首先在 URL 数组上调用 Promise.all,检索代表各个获取操作的 Promise 数组。成功完成这些初始提取后,将使用第二次 Promise.all 调用从响应主体中捕获文本内容。然后将封装的文本值聚合到一个内聚数组中。以下代码优雅地捕捉了这种方法的本质:

Promise.all(urls.map(u => fetch(u))).then(responses =>
    Promise.all(responses.map(res => res.text()))
).then(texts => {
    // Proceed with texts array...
})
登录后复制

此策略的简化变体涉及在初始获取承诺履行期间直接提取响应正文:

Promise.all(urls.map(url =>
    fetch(url).then(resp => resp.text())
)).then(texts => {
    // Proceed with texts array...
})
登录后复制

或者更简洁地使用await:

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

以上是Promise.all 如何简化异步 URL 获取以提高效率?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板