Promise之Promise.race()
描述
参考MDN
developer.mozilla.org/zh-CN/docs/… 语法
Promise.race(iterable);
-
参数
返回值
一个待定的
Promise只要给定的迭代中的一个 promise 解决或拒绝,就采用第一个 promise 的值作为它的值,从而异步地解析或拒绝(一旦堆栈为空)。描述
race函数返回一个Promise,它将与第一个传递的 promise 相同的完成方式被完成。它可以是完成(resolves),也可以是失败(rejects),这要取决于第一个完成的方式是两个中的哪个。如果传的迭代是空的,则返回的 promise 将永远等待。
如果迭代包含一个或多个非承诺值和/或已解决/拒绝的承诺,则
Promise.race将解析为迭代中找到的第一个值。
/**
* 1.Promise.race(iterable) 方法返回一个Promise,
* 一旦某一个Promise 解决或者拒绝,返回的promise就会解决或者拒绝
***/
function PromiseRace(array) {
if (!Array.isArray(array)) return new TypeError("不是数组");
return new Promise((resolve, reject) => {
for (let i = 0; i < array.length; i++) {
if (array[i] instanceof Promise) {
array[i].then(resolve, reject);
} else {
resolve(array[i])
}
}
})
}
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, 'one')
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'two');
});
let arr = [promise1,promise2]
PromiseRace(arr).then(res=>{
console.log(res)
}).catch(e=>{
console.log(e)
})
-
/** * 1.Promise.race(iterable) 方法返回一个Promise, * 一旦某一个Promise 解决或者拒绝,返回的promise就会解决或者拒绝 ***/ function PromiseRace(array) { if (!Array.isArray(array)) return new TypeError("不是数组"); return new Promise((resolve, reject) => { for (let i = 0; i < array.length; i++) { if (array[i] instanceof Promise) { array[i].then(resolve, reject); } else { resolve(array[i]) } } }) } const promise1 = new Promise((resolve, reject) => { setTimeout(resolve, 500, 'one') }); const promise2 = new Promise((resolve, reject) => { setTimeout(resolve, 100, 'two'); }); let arr = [promise1,promise2] PromiseRace(arr).then(res=>{ console.log(res) }).catch(e=>{ console.log(e) }) -