promise.all啥意思

比如你发个请求,下面这种就是典型的回调地狱,这种发请求的方式,都是只能上一个请求发完,才会进去发下一个

this.api.getdata().then(() => {
  this.api.getdata1().then(() => {

  })
})

但是你也可以这样写,这样请求就都是并发发送的了

this.api.getdata().then(() => {

})
this.api.getdata1().then(() => {

})

同样,如果你用promise.all也可以达到并发发送请求的作用,不过它相比而言有个好处,就是

Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的,即p1的结果在前,即便p1的结果获取的比p2要晚。这带来了一个绝大的好处:在前端开发请求数据的过程中,偶尔会遇到发送多个请求并根据请求顺序获取和使用数据的场景,使用Promise.all毫无疑问可以解决这个问题,不过用async await也可以按顺序发请求。这篇文章写得还行https://www.jianshu.com/p/7e60fc1be1b2

 

对了,还有一道面试题,看到一个答案,感觉是对的

题目:利用Promise和 async/await实现以 下功能:现有一个接 口https://test.com/get?id=1, 需要发起id从1~200的GET方式调用200次异步请求,要求分20轮发出,前-轮全部完成后才进行下轮,每轮同时并发请求为10次

async function manyReqs() {
  function getReq (url, data) {
    return new Promise((resolve, reject) => {
      axios.get(url, {
        params: {
          ...data
        }
      }).then((res) => {
        resolve(res);
      }).catch((err) => {
        reject(err);
      })
    })
  }
 
  const datas = [];
  for (let i = 1; i <= 200; i++) {
    datas.push({ id: i })
  }
 
  const url = 'https://test.com/get';
  const promises = datas.map((data) => {
    getReq(url, data);
  })
 
  let result = [];
  for (let i = 9; i < 200; i += 10) {
    const promisePart = promises.slice(i - 9, i + 1);
    result = result.concat(await Promise.all(promisePart));
  }
 
  return result;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值