如何使用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); });
逻辑说明
- 首先调用
Provider.findCity()获取城市名,这一步是串行的,因为后续两个请求都依赖它的结果 - 拿到城市名后,把
getWeather和getLocalCurrency的Promise传入Promise.all(),同时用Promise.resolve(city)把城市名也加入结果数组,方便后续一起解构输出 Promise.all()会等待所有传入的Promise都完成后,返回一个包含所有结果的数组,我们通过解构赋值取出对应的数据并输出- 最后添加
catch捕获整个流程中可能出现的错误
对比原async/await实现
原代码中getWeather和getLocalCurrency是串行执行的,而用Promise.all()可以让这两个请求并行发起,减少整体的等待时间,效率更高。
内容的提问来源于stack exchange,提问作者user9151444
相关产品推荐
相关产品推荐

