定义: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
网友评论