JavaScript高级(十五)----promise.all

Promise.all方法使用场景

复制代码
例如:用户点击按钮,会向服务器请求数据,但是数据分别是不同的后端接口获取的数据,需要展示在一个span中
如果用户还没请求完成 则span会显示加载中...
等待两个后端接口都返回了数据 才会将数据展示在span 中
javascript 复制代码
   <div class="content">
      <button class="btn">开始请求多组数据</button>
      <span class="text"></span>
   </div>


    const btn = document.querySelector('.btn');
    const text = document.querySelector('.text');

    // 请求数据的接口1
    function getData1() {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          return resolve('getData1')
        }, 1000)
      })
    }

    // 请求数据的接口2
    function getData2() {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          return resolve('getData2')
        }, 3000)
      })
    }

    btn.addEventListener('click', async () => {
      // 如果用户还没请求完成 则span会显示加载中
      text.innerHTML = '加载中.....'

      try {
        const res1 = await getData1();
        const res2 = await getData2();
        Promise.all([res1, res2])
          // 如果向后端请求的数据 全部请求成功 则把数据渲染到页面上
          .then(res => {
            let strHtml = '';
            res.forEach(item => strHtml += item)
            text.innerHTML = strHtml;
          })
      } catch (err) {
        // 如果reject被执行 会到 catch里面来 .. 可以执行相应的代码
        text.innerHTML = `某个接口请求失败,数据无法渲染`;
        console.log('某一个后端接口请求失败', err)
      }
    })

Promise.all

  • 接收的是数组,得到的结果也是数组,并且一一对应,也可以理解为Promise.all照顾跑的最慢的,最慢的跑完才结束。
  • 只有当所有 Promise 实例都变成 fulfilled 状态,新 Promise 的状态才是 fulfilled 状态,返回所有 promise 实例的 resolve value 数组。
  • 如果有一个 Promise 实例状态是 rejected 状态,则新 Promise 的状态是 rejected,返回第一个 promise reject 的 reason。
  • 这样我们可以取到不同接口的所有数据。
相关推荐
XR1234567882 分钟前
办公组网像“看病“:先问诊,再选型
开发语言·php
布莱克6054 分钟前
strcpy 函数详解:作用、用法与安全缺陷
c语言·开发语言·c++·安全
软件黑马王子13 分钟前
3.单例模式问题1:构造函数
开发语言·单例模式·c#
Freak嵌入式20 分钟前
RP2040 PIO 编程模型与状态机原理:从硬件架构到工作逻辑全解析
java·大数据·开发语言·单片机·嵌入式硬件·硬件架构
Java小白笔记41 分钟前
Java中大数据实时归集与指标汇总方案
java·大数据·开发语言
随遇而安zx43 分钟前
【地基篇】---Java 8 JVM 知识大纲
java·开发语言·jvm
Coodor1 小时前
在前端如何转换IC卡卡号格式
前端·javascript·nfc·卡号格式
软件黑马王子1 小时前
4.单例模式问题2:重复挂载
开发语言·单例模式·c#
quantdash_cc1 小时前
批量请求和循环请求有什么区别?从 API 请求次数看量化数据获取的工程设计
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
百慕大三角1 小时前
给 SPA 加页面切换动画:View Transitions API 从入门到实战
前端·javascript