Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
function isPromise(x) { // 校验是否是 promise
if((typeof x == 'object' && x !== null) || typeof x == 'function') {
if(typeof x.then == 'function') {
return true
}
}
return false
}
Promise.race = function(promises) {
return new Promise ((resolve, reject) => {
if(!promises.length) return
promises.forEach(item => {
if(isPromise(item)) {
item.then((data) => {
resolve(data)
}, reject)
}else {
resolve(item)
}
});
})
}
var p5 = new Promise(function(resolve, reject) {
setTimeout(resolve, 500, "five");
});
var p6 = new Promise(function(resolve, reject) {
setTimeout(resolve, 500, "six");
});
var p7 = new Promise(function(resolve, reject) {
setTimeout(reject, 100, "7");
});
Promise.race([p5, p6, p7]).then(data => {
console.log('1---->', data);
}, err => {
console.log(err);
})