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

          })

        })
        }
相关推荐
向上的车轮1 分钟前
TypeORM——基于 TypeScript/JavaScript 的对象关系映射(ORM)框架
javascript·typescript·typeorm
小杍随笔2 分钟前
【Rust 语言编程知识与应用:闭包详解】
开发语言·后端·rust
程序员小寒4 分钟前
JavaScript设计模式(一):单例模式实现与应用
javascript·单例模式·设计模式
2301_764441338 分钟前
使用python构建的STAR实验ΛΛ̄自旋关联完整仿真
开发语言·python·算法
Dxy12393102169 分钟前
JS如何把数据添加到列表中
前端·javascript·vue.js
共享家95279 分钟前
Java入门( 异常 )
java·开发语言·php
御形封灵11 分钟前
基于canvas的路网编辑交互
开发语言·javascript·交互
m0_5027249513 分钟前
Arco design vue 阻止弹窗关闭
javascript·vue.js·arco design
xifangge202513 分钟前
Python 爬虫实战:爬取豆瓣电影 Top250 数据并进行可视化分析
开发语言·爬虫·python
蜡台13 分钟前
Uniapp 实现 二手车价格评估 功能
前端·javascript·uni-app·估值·汽车抵押·二手车评估