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) //
})