Promise的实例方法
Promise.prototype.any
any的参数是一个可迭代对象, 它会返回第一个执行resolve函数的实参值,如果迭代对象的所有项执行的都是reject,那么它会抛出错误
(async ()=> {
try{
const result = await Promise.any(new Set([
Promise.reject('1'),
Promise.resolve('2')
]))
console.log(result) // --->'2'
}catch (err) {
console.error(err)
}
})()
(async ()=> {
try{
const result = await Promise.any(new Set([
new Promise(resolve=> setTimeout(resolve, 1000, 'one')),
Promise.resolve('two')
]))
console.log(result) // --->'2'
}catch (err) {
console.error(err)
}
})()
;(async ()=> {
try{
const result = await Promise.any(new Set([
Promise.reject('1'),
Promise.reject('2')
]))
console.log(result)
}catch (err) {
console.error(err) // ---> AggregateError: All promises were rejected
}
})()
Promise.prototype.all
all的参数是一个可迭代对象,迭代对象必须全部执行resolve,才会返回一个所resolve实参组成的数组,否者只会执行第一个reject
;(async ()=> {
try{
const result = await Promise.all(new Set([
Promise.resolve('one'),
Promise.reject('1'),
Promise.reject('2'),
]))
console.log(result)
}catch (err) {
console.error(err) // '1'
}
})()
;(async ()=> {
try{
const result = await Promise.all(new Set([
Promise.resolve('one'),
Promise.resolve('two'),
]))
console.log(result) // ['one', 'two']
}catch (err) {
console.error(err)
}
})()
Promise.prototype.allSettled
allSerttled的参数是一个可迭代对象,不管每一项执行了resolve还是reject都会返回一个对象,如果是resolve,则是{status: 'fulfilled', value: 'xx'},如果执行了reject,则是{status: 'rejected', reason:'xx'}
;(async ()=> {
try{
const result = await Promise.allSettled(new Set([
Promise.resolve('one'),
Promise.resolve('two'),
Promise.reject('two'),
]))
console.log(result)
/*
[
{status: 'fulfilled', value: 'one'},
{status: 'fulfilled', value: 'two'},
{status: 'rejected', reason:'xx'}
]
*/
}catch (err) {
console.error(err)
}
})()
Promise.prototype.race
race会返回第一个resolve或者reject的实参
;(async ()=> {
try{
const result = await Promise.race(new Set([
new Promise(resolve=> setTimeout(resolve, 1000, 'hello')),
new Promise((resolve, reject)=> setTimeout(reject, 2000, 'hi'))
]))
console.log(result) //'hello'
}catch (err) {
console.error(err)
}
})()
;(async ()=> {
try{
const result = await Promise.race(new Set([
new Promise(resolve=> setTimeout(resolve, 1000, 'hello')),
new Promise((resolve, reject)=> setTimeout(reject, 100, 'hi'))
]))
console.log(result)
}catch (err) {
console.error(err) // 'hi'
}
})()

浙公网安备 33010602011771号