Promise.all( ) reject有.catch,依然可以执行.then

const a = new Promise((resolve, reject) => {
    console.log(1)
    resolve('结果1')
})
const b = new Promise((resolve, reject) => {
    console.log(2)
    reject('结果2')
})
    .catch((err) => {
        console.log('bResult失败', err) //进来了
    })
const c = new Promise((resolve, reject) => {
    console.log(3)
    resolve('结果3')
})

Promise.all([a, b, c])
    .then((res) => {
        console.log('都结束了',res) // 都结束了 [ '结果1', undefined, '结果3' ]
    })
    .catch(err => {
        console.log('失败', err) 
    })

打印结果:

1
2
3
bResult失败 结果2
都结束了 [ '结果1', undefined, '结果3' ]

const a = new Promise((resolve, reject) => {
    console.log(1)
    resolve('结果1')
})
const b = new Promise((resolve, reject) => {
    console.log(2)
    reject('结果2')
})
const c = new Promise((resolve, reject) => {
    console.log(3)
    resolve('结果3')
})

Promise.all([a, b, c])
    .then((res) => {
        console.log('都结束了',res)
    })
    .catch(err => {
        console.log('失败', err) //失败 结果2
    })

打印结果:

1
2
3
失败 结果2

如何让promise.all 抛出异常后依然有效

var p1 = new Promise((resolve, reject) => { resolve('p1'); });
var p2 = new Promise((resolve, reject) => { reject('p2'); });
var p3 = new Promise((resolve, reject) => { resolve('p3'); });
Promise.all([p1, p2, p3]
    .map(p => p.catch(e => '出错后返回的值')))
    .then(values => { console.log('values', values); }) 
    .catch(err => { console.log('err', err); })

打印结果:
values [ 'p1', '出错后返回的值', 'p3' ]

或者使用 Promise.allSettled (),只要结束了就会执行.then

摘抄:

如何让promise.all 抛出异常后依然有效_一口泡饭的博客-CSDN博客

Promise.reject和return Promise.reject的区别在于使用方式和返回值的处理。 1. 使用方式:return Promise.reject可以直接在函数中使用return语句返回一个Rejected状态的Promise对象,而Promise.reject需要通过Promise.reject(reason)方法来返回一个Rejected状态的Promise对象。 2. 返回值的处理:return Promise.reject将Rejected状态的Promise对象作为函数的返回值直接返回,可以在函数外部使用.catch方法来处理被拒绝的Promise。而Promise.reject需要在.then方法中使用.reject方法或.catch方法来处理被拒绝的Promise。 例如,使用return Promise.reject('error')直接返回一个Rejected状态的Promise对象,并且可以在调用函数的地方使用.catch方法来捕获并处理这个被拒绝的Promise。而Promise.reject('error').catch将错误传递给.catch方法来处理。 总结起来,return Promise.reject可以更方便地在函数中返回一个被拒绝的Promise对象,而Promise.reject需要在.then方法或.catch方法中处理被拒绝的Promise对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Promise.resolve() 和Promise.reject() 使用及其覆盖场景](https://blog.csdn.net/qq_40696108/article/details/123063870)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值