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);
              }
            })

          })

        })
        }
相关推荐
乐观勇敢坚强的老彭3 分钟前
C++ 竞赛常用算法模板速查表
开发语言·c++·算法
离陌在学C#17 分钟前
C# 泛型:从基础到高级应用
开发语言·c#
ly768917 分钟前
Java 设计模式详解:从原则到 23 种经典模式
java·开发语言·设计模式
SomeB1oody20 分钟前
【RustyML入门】2.13. 孤立森林
开发语言·后端·机器学习·rust·教程
萧瑟余晖34 分钟前
Java深入解析篇三十之Java日志框架
java·开发语言
Herbert_hwt1 小时前
【C语言基础】常量、选择结构与运算符全解析
c语言·开发语言·算法
AI视觉网奇1 小时前
动作识别 视频理解大模型
开发语言·python·音视频
无糖可可果1 小时前
从零读懂一个 Next.js 全栈笔记应用
前端
Maxkim1 小时前
DeepSeek Harness 源码深度分析:像 VS Code 一样插件化的 Agent 框架
前端·架构
xiaominlaopodaren1 小时前
three.js地图数学基础(八):浮点精度
javascript·gis·three.js