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

          })

        })
        }
相关推荐
汪子熙8 分钟前
Angular i18n 资源加载利器解析: i18n-http-backend
前端·javascript·面试
天天扭码11 分钟前
在React项目中实现富文本编辑文章并发布
前端·react.js·github
Yehong14 分钟前
nuxt实现50个前端小创意(1)——前端基础学习
前端·vue.js
拉不动的猪14 分钟前
回顾vue3组件在运行过程中的编译提升
前端·vue.js·trae
天天扭码16 分钟前
前端必备 | 一文掌握React的Token管理
前端·javascript·react.js
烛阴16 分钟前
用Joi守住数据防线!Node.js/前端必备校验神器入门与进阶
前端·javascript
开发者工具分享1 小时前
Lua 的速度为什么比 Python 快
开发语言·python·lua
蔗理苦1 小时前
2025-05-28 Python&深度学习8——优化器
开发语言·pytorch·python·深度学习·优化器
神秘敲码人1 小时前
前端面试题-HTML篇
前端·面试·html
杏仁海棠花饼1 小时前
杏仁海棠花饼的学习日记第十四天CSS
前端·css·学习