JS手写代码篇---Pomise.race

6、promise.race

Promise.race() 静态方法接受一个 promise 可迭代对象作为输入,并返回一个 Promise。这个返回的 promise 会随着第一个 promise 的敲定而敲定。

比如说:

复制代码
    //   原生promiserace;
      const p1 = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve("p1");
        }, 500);
      });
      const p2 = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve("p2");
        }, 100);
      });
      Promise.race([p1, p2]).then((value) => {
        console.log(value); //p1
      });

手写promise.race:

  • 输入可迭代的数组
  • 输出返回应该promise
  • 第一个完成的话就要全部结束,所以我们要设定标志词
  • 如果传入的不是promise怎么办,使用promise.relove将每个元素转换为Promise,以处理非Promise的情况。

代码如下:

复制代码
      //  promise.race
        static race(array){
        // 判断是否为空
        if(array.length === 0){
          return ;
        }
        // 返回应该鑫的promise
        return new Commitment((resolve , reject) => {
                   // 标志
          let close = false;
          // 开始遍历
          array.forEach((item) =>{
            Promise.resolve(item).then((res) => {
              if(!close){
                close = true;
                resolve(res);
              }

            }).catch((error) => {
              if(!close){
                close = true;
                reject(error);
              }
            })

          })

        })
        }

志词

  • 如果传入的不是promise怎么办,使用promise.relove将每个元素转换为Promise,以处理非Promise的情况。

代码如下:

复制代码
      //  promise.race
        static race(array){
        // 判断是否为空
        if(array.length === 0){
          return ;
        }
        // 返回应该鑫的promise
        return new Commitment((resolve , reject) => {
                   // 标志
          let close = false;
          // 开始遍历
          array.forEach((item) =>{
            Promise.resolve(item).then((res) => {
              if(!close){
                close = true;
                resolve(res);
              }

            }).catch((error) => {
              if(!close){
                close = true;
                reject(error);
              }
            })

          })

        })
        }
相关推荐
2501_928996225 分钟前
GPT-4o换DeepSeek迁移成本多少?中科热备解析API聚合平台技术账本
前端·数据库·人工智能
东风破_6 分钟前
从跨域到 WebSocket:前端跨域方案、SSE 与双向实时通信详解
前端·后端
原则猫15 分钟前
TS 类型工具
前端
-今昭-1 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
excel1 小时前
Nuxt + Twin CSS 中宽度超过屏幕时底部出现空白的原因与解决方案
前端·javascript
计算机魔术师2 小时前
美国司法部正式站队 OpenAI,AI 训练的版权账要这么算了
前端
IT_陈寒3 小时前
React Hooks闭包陷阱差点让我加班到凌晨
前端·人工智能·后端
风骏时光牛马3 小时前
疑难Bug根因定位与问题复盘分析
前端
黑马程序员毕设3 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
_Twink1e3 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen