Promise.all的实现
全部状态成功才返回成功的数组集合,有一个状态失败就返回失败
// promise.all()
function PromiseAll(list) {
return new Promise((resolve, reject) => {
let result = []
let count = 0
list.forEach((item, index) => {
item.then((res) => {
result[index] = res
count++
count === list.length && resolve(result)
}).catch((err) => reject(err))
})
})
}
const promiseList = [
new Promise((resolve) => setTimeout(() => resolve('成功1'), 2000)),
new Promise((resolve, reject) => setTimeout(() => reject('失败1'), 1000)),
new Promise((resolve) => setTimeout(() => resolve('成功3'), 2600)),
new Promise((resolve) => setTimeout(() => resolve('成功4'), 2300)),
]
PromiseAll(promiseList).then((res) => console.log(res)).catch((err) => console.log(err))
Promise.all(promiseList).then((res) => console.log(res)).catch((err) => console.log(err))
promise.race的实现
返回第一个率先改变状态的Promise结果
function PromiseRace(list) {
return new Promise((resolve, reject) => {
list.forEach((item) => {
item.then((res) => resolve(res)).catch((err) => reject(err))
})
})
}
const promiseList = [
new Promise((resolve) => setTimeout(() => resolve('成功1'), 3000)),
new Promise((resolve, reject) => setTimeout(() => reject('失败1'), 4000)),
new Promise((resolve) => setTimeout(() => resolve('成功3'), 2600)),
new Promise((resolve) => setTimeout(() => resolve('成功4'), 2300)),
]
PromiseRace(promiseList).then((res) => console.log(res)).catch((err) => console.log(err))
Promise.race(promiseList).then((res) => console.log(res)).catch((err) => console.log(err))
promise.allSettled的实现
- 永远返回成功的状态,返回的是数组集合;
- 其中状态是成功的数据格式为: { status: 'fulfilled', value }
- 其中状态是失败的数据格式为: { status: 'rejected', reason }
function PromiseAllSettled(list) {
return new Promise((resolve) => {
let result = []
let count = 0
list.forEach((item, index) => {
item.then((res) => {
result[index] = { status: 'fulfilled', value: res }
}).catch((err) => {
result[index] = { status: 'rejected', reason: err }
}).finally(() => {
count++
count === list.length && resolve(result)
})
})
})
}
const promiseList = [
new Promise((resolve) => setTimeout(() => resolve('成功1'), 2000)),
new Promise((resolve, reject) => setTimeout(() => reject('失败1'), 1000)),
new Promise((resolve) => setTimeout(() => resolve('成功3'), 2600)),
new Promise((resolve) => setTimeout(() => resolve('成功4'), 2300)),
]
PromiseAllSettled(promiseList).then((res) => console.log(res))
Promise.allSettled(promiseList).then((res) => console.log(res))
promise.any的实现
全部状态失败才返回失败,其中有成功的状态就返回那个成功的
function promiseAny(list) {
return new Promise((resolve, reject) => {
let count = 0
list.forEach((item, index) => {
item.then((res) => resolve(res)).catch((err) => {
count++
count === list.length && reject('都失败了')
})
})
})
}
const promiseList = [
new Promise((resolve) => setTimeout(() => resolve('成功1'), 3000)),
new Promise((resolve, reject) => setTimeout(() => reject('失败1'), 1000)),
new Promise((resolve) => setTimeout(() => resolve('成功3'), 2600)),
new Promise((resolve) => setTimeout(() => resolve('成功4'), 2300)),
]
promiseAny(promiseList).then((res) => console.log(res)).catch((err) => console.log(err))
Promise.any(promiseList).then((res) => console.log(res)).catch((err) => console.log(err))