用promise.all搭配map方法解决异步问题

15 篇文章 1 订阅
14 篇文章 0 订阅
本文讲述了如何使用Promise.all解决异步请求并发问题,通过示例展示了如何在函数中按需多次请求数据,并利用Promise.all确保所有请求完成后处理结果。同时提及了避免定时器风险和优化封装的图表组件的方法。
摘要由CSDN通过智能技术生成

今天在项目中遇到一个异步问题,出现原因如下:
在这里插入图片描述
我在getEnergeHouseDanhao这个函数中加入了一个请求,该函数是获取某机器单耗,但要请求四次分别去获取年单耗、月单耗、日单耗、小时单耗
在这里插入图片描述
然而执行后因为请求是异步的,此时打印datas拿不到在请求中push进去的数组,在设置定时器才能拿到数组。
在这里插入图片描述

然而我们无法确定接口的相应时间,用定时器解决显然是存在很大风险的。


那么该如何解决类似的问题呢?可以使用promise.all解决异步。

首先简单且通俗易懂地介绍一下promise.all是什么,具体要深入理解请查阅官方文档

在这里插入图片描述

而在需要用不同的入参去重复调用一个封装的接口函数去请求数据时,我们可以先赋值一个存放入参的数组paramsList,通过map遍历该数组去进行一次次的请求,并将这些请求都放在promise.all里执行,具体实现方法如下:

例:paramsList存放入参的数组
在这里插入图片描述
调用promise.all
在这里插入图片描述
让我们来看看打印出来的reslist是什么:
在这里插入图片描述

4个请求都成功,拿到一个有4个元素的数组,并每个数组都拿到了接口返回的data,这时就基本大功告成了。

再编写一下.then内的逻辑
在这里插入图片描述
在这里插入图片描述

大功告成~拿到数据就可以去绘制图表了。


关于我自己封装的图表组件还很不完善,等未来完善得差不多了再发一帖吧

代码:

      Promise.all(paramsList.map((item) => {
        return http.post("#你的请求", {
          ...item
        });
      })
      ).then((reslist) => {
        // 请求成功逻辑
        console.log(reslist);
      }).catch(() => {
        // 失败逻辑
      });

THX~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值