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

          })

        })
        }
相关推荐
TangentDomain20 小时前
AI 写代码时代,游戏 UI 架构为什么停在 MVP?
前端·游戏·架构
英勇无比的消炎药20 小时前
前端提效神器全新AI组件库TinyRobot改写日常开发模式
前端·vue.js
GuWenyue20 小时前
10分钟搞定TodoList实战!从0搭建Bun+TS的RESTful接口服务
前端·typescript·bun
IMPYLH20 小时前
HTML 的 <a>元素
前端·javascript·html
PedroQue9920 小时前
uni-router:uni-app路由管理新选择
前端·uni-app
Cerrda20 小时前
一行指令搞定复制:Vue 3 vCopy 实现解析
前端·代码规范
绵绵细雨中的乡音20 小时前
监控显示一切正常,可用户根本打不开网站——Blackbox Exporter帮我找到了真相(1)
开发语言·php
c++之路20 小时前
CMake 系列教程(五):进阶技巧
c语言·开发语言·c++
ZengLiangYi20 小时前
本地向量数据库选型:vectra vs chroma vs hnswlib
javascript·数据库·后端
英勇无比的消炎药20 小时前
前端提效神器TinyRobot
前端·vue.js