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

          })

        })
        }
相关推荐
王者鳜錸2 分钟前
PYTHON从入门到实践-18Django模版渲染
开发语言·python·django
一只韩非子8 分钟前
程序员太难了!Claude 用不了?两招解决!
前端·claude·cursor
JefferyXZF10 分钟前
Next.js项目结构解析:理解 App Router 架构(二)
前端·全栈·next.js
Sane15 分钟前
react函数组件怎么模拟类组件生命周期?一个 useEffect 搞定
前端·javascript·react.js
Hard but lovely19 分钟前
C++ STL--> vector的模拟实现!
开发语言·c++
hweiyu0040 分钟前
IDEA搭建GO环境
开发语言·后端·golang·intellij-idea·idea·intellij idea
gnip1 小时前
可重试接口请求
前端·javascript
若梦plus1 小时前
模块化与package.json
前端
烛阴1 小时前
Aspect Ratio -- 宽高比
前端·webgl
若梦plus1 小时前
Node.js中util.promisify原理分析
前端·node.js