Promise.all
定义:当Promise 结果都为resolve 返回resolve的数组集,当一个为reject,将第一个遇到的reject返回。
const p1 = Promise.resolve('ok1')
const p2 = Promise.reject('no2')
const p3 = Promise.resolve('ok3')
const p4 = Promise.reject('no4')
/**
*
* @param {*} promiseArray Promise 数组集
* 返回结果为Promise
*/
function PromiseAll(promiseArray) {
return new Promise(function (resolve, reject) {
let countNum = 0;
let promiseArrayResult = new Array()
let promiseNum = promiseArray.length;
for (let i = 0; i < promiseNum; i++) {
promiseArray[i].then((item) => {
promiseArrayResult.push(item)
if(i===(promiseNum-1)){
resolve(promiseArrayResult)
return ;
}
},(err)=>{
reject(err)
}).catch((errData)=>{
console.log(errData) //
})
}
})
}
PromiseAll([p1, p2, p3,p4]).then((resultData)=>{
console.log(resultData) //['ok1','no2','ok3']
},(errDate)=>{
console.log(errDate)
}).catch((errData)=>{
console.log(errData) //
})
Promise.race
上面代码中,只要p1
、p2
、p3
之中有一个实例率先改变状态,p
的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p
的回调函数。
const p1 = new Promise(function (resolve, reject) {
console.log('这段我也执行了一')
setTimeout(() => reject(new Error('request timeout')), 2000)
})
const p3 = new Promise(function (resolve, reject) {
console.log('这段我也执行了二')
setTimeout(() => reject(new Error('request timeout2')), 1000)
})
const p2 = new Promise(function (resolve, reject) {
console.log('这段我也执行了三')
setTimeout(() => resolve('我成功啦'), 4000)
})
/**
*
* @param {*} promiseArray Promise 数组集
* 返回结果为Promise
*/
function PromiseRace(promiseArray) {
return new Promise(function (resolve, reject) {
let countNum = 0;
let promiseArrayResult = new Array()
let promiseNum = promiseArray.length;
for (let i = 0; i < promiseNum; i++) {
promiseArray[i].then((item) => {
resolve(item)
return ;
},(item)=>{
reject(item)
}).catch((errData)=>{
reject(errData) //
})
}
})
}
PromiseRace([p1, p2,p3]).then((resultData)=>{
console.log(resultData) //['ok1','no2','ok3']
},(errDate)=>{
console.log(errDate)
}).catch((errData)=>{
console.log(errData) //
})