美文网首页源码学习
es6 Promise 学习笔记4 Promise.race

es6 Promise 学习笔记4 Promise.race

作者: 草祭木初 | 来源:发表于2020-07-17 10:29 被阅读0次

    定义:Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。

    例子

    const promise1 = new Promise((resolve, reject) => {
      setTimeout(resolve, 500, 'one');
    });
    
    const promise2 = new Promise((resolve, reject) => {
      setTimeout(resolve, 100, 'two');
    });
    
    Promise.race([promise1, promise2]).then((value) => {
      console.log(value);
      // Both resolve, but promise2 is faster
    });
    // expected output: "two"
    

    源码

    export default function race(entries) {
      /*jshint validthis:true */
      let Constructor = this;
    
      if (!isArray(entries)) {
        return new Constructor((_, reject) => reject(new TypeError('You must pass an array to race.')));
      } else {
        return new Constructor((resolve, reject) => {
          let length = entries.length;
    // entries 里的所有Promise都会被执行
          for (let i = 0; i < length; i++) {
    // 根 Promise 的resolve 和 reject 被传到了 entry的then里面
    // 所以 最先进入 then 的 entry 产生的结果会被返回
    // 因为 当根resolve 或 reject 被执行后 它的状态就变了 不再是 PENDING,所以后来entry进入then后 根Promise 的resolve 或 reject 不会被执行
    
    // 其实这里可以改造一下 让根Promise的状态改变后 其他 entry都不进入then,大家可以自己想想
            Constructor.resolve(entries[i]).then(resolve, reject);
          }
        });
      }
    }
    

    es6 Promise 学习笔记1 基础代码解析
    es6 Promise 学习笔记2 链式调用
    es6 Promise 学习笔记3 Promise.all
    es6 Promise 学习笔记4 Promise.race

    相关文章

      网友评论

        本文标题:es6 Promise 学习笔记4 Promise.race

        本文链接:https://www.haomeiwen.com/subject/dbgwhktx.html