You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Promise.all()优化重构给定的JavaScript异步代码?

使用Promise.all()实现指定逻辑的方案

你的需求是用Promise.all()替代原有的async/await串行逻辑,核心思路是:先通过findCity获取城市名称,再将依赖该城市的getWeather和getLocalCurrency两个异步请求并行执行,这正是Promise.all()的适用场景(并行处理多个无依赖的Promise)。

实现代码

Provider.findCity(0.1278, 51.5074)
  .then(city => {
    // 将两个依赖city的Promise放入数组,用Promise.all并行执行
    return Promise.all([
      Promise.resolve(city), // 保留city结果,方便后续输出
      Provider.getWeather(city),
      Provider.getLocalCurrency(city)
    ]);
  })
  .then(([city, cityWeather, cityCurrency]) => {
    console.log(city);
    console.log(cityWeather);
    console.log(cityCurrency);
  })
  .catch(err => {
    // 统一处理可能出现的错误
    console.error('请求出错:', err);
  });

逻辑说明

  1. 首先调用Provider.findCity()获取城市名,这一步是串行的,因为后续两个请求都依赖它的结果
  2. 拿到城市名后,把getWeather和getLocalCurrency的Promise传入Promise.all(),同时用Promise.resolve(city)把城市名也加入结果数组,方便后续一起解构输出
  3. Promise.all()会等待所有传入的Promise都完成后,返回一个包含所有结果的数组,我们通过解构赋值取出对应的数据并输出
  4. 最后添加catch捕获整个流程中可能出现的错误

对比原async/await实现

原代码中getWeather和getLocalCurrency是串行执行的,而用Promise.all()可以让这两个请求并行发起,减少整体的等待时间,效率更高。

内容的提问来源于stack exchange,提问作者user9151444

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 00:46:03