• promise.race方式使用


    Promise.race

    赛跑机制,只认第一名

    Promise.race其实使用的并不多,如果真要使用。我们可以提出这样一个需求:

    比如:点击按钮发请求,当后端的接口超过一定时间,假设超过三秒,没有返回结果,我们就提示用户请求超时

    <template>
      <div class="box">
        <el-button type="primary" plain @click="clickFn">点击测试</el-button>
      </div>
    </template>
    
    <script>
    export default {
      name: "App",
      methods: {
        async clickFn() {
    
          // 第一个异步任务
          function asyncOne() {
            let async1 = new Promise(async (resolve, reject) => {
              setTimeout(() => {
                // 这里我们用定时器模拟后端发请求的返回的结果,毕竟都是异步的
                let apiData1 = "某个请求";
                resolve(apiData1);
              }, 4000);
            });
            return async1;
          }
          console.log("异步任务一", asyncOne());  // 返回的是pending状态的Promise对象
    
          // 第二个异步任务
          function asyncTwo() {
            let async2 = new Promise(async (resolve, reject) => {
              setTimeout(() => {
                let apiData2 = "超时提示";
                resolve(apiData2);
              }, 3000);
            });
            return async2;
          }
          console.log("异步任务二", asyncTwo()); // 返回的是pending状态的Promise对象
    
          // Promise.race接收的参数也是数组,和Promise.all类似。只不过race方法得到的结果只有一个
          // 就是谁跑的快,结果就使用谁的值
          let paramsArr = [asyncOne(), asyncTwo()]
    
          Promise
          .race(paramsArr)
          .then((value) => {
            console.log("Promise.race方法的结果", value);
            if (value == "超时提示") {
              this.$message({
                type:"warning",
                message:"接口请求超时了"
              })  
            }else{
              console.log('正常操作即可');
            }
          })
        },
      },
    };
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    Promise.all接收的是数组,得到的结果也是数组,并且一一对应,也可以理解为Promise.all照顾跑的最慢的,最慢的跑完才结束。
    Promise.race接收的也是数组,不过,得到的却是数组中跑的最快的那个,当最快的一跑完就立马结束。

  • 相关阅读:
    数据安全API爆发式增长催生哪些安全挑战
    实战攻防演练-Linux写入ssh密钥,利用密钥登录
    【HDFS】客户端写数据时,dataQueue的几处wait方法的调用场景
    python 脚本 解决 windows 端口占用问题
    Onnxruntime之tensorrt加速
    Essential Macleod中的吸收工具
    算法 数据结构 递归冒泡算法 java冒泡算法 优化递归冒泡 数据结构(九)
    UNIX 域协议(本地通信协议)
    Redisson-MultiLock使用
    【电路笔记】-基尔霍夫电路定律
  • 原文地址:https://blog.csdn.net/Xiang_Gong_Ya_/article/details/137276554