使用promise.all 进行5个请求,若其中一个失败了,怎么让其他4个成功返回

1,533 阅读1分钟

三种简单解决方案,

方案一: 在单个的 catch 中对失败的 Promise 请求做处理,在catch里面resolve就行了

 var p1 = new Promise(resolve => {
        let p1Data = b;
        resolve(p1Data)
    }).catch(err => {
        return Promise.resolve("P1 无数据")
    })

    var p2 = new Promise(resolve => {
        let p2Data = 'p2的有数据';
        resolve(p2Data)
    }).catch(err => {
        return Promise.resolve("P2 无数据")
    })

    Promise.all([p1, p2]).then(res => {
        console.log(res);
    }).catch(err => {
        throw new Error("Promise 执行错误", err)
    })

方案二:使用allSettled

const promise1 = new Promise(resolve=>setTimeout(resolve,2000))
 const promise2 = Promise.reject('123')
//传入的promise不管是成功的还是失败的,都会执行then方法
 Promise.allSettled([promise1,promise2])
      .then(()=>{
 console.log('成功了')
      })

方案三:把 reject 操作换成 resolve(new Error("...")) 处理

const promise1 = new Promise(resolve=>setTimeout(resolve,2000))
//失败操作使用resolve
 const promise2 = Promise.resolve(new Error("..."))
//传入的promise不管是成功的还是失败的,都会执行then方法
 Promise.all([promise1,promise2])
      .then(()=>{
 console.log('成功了')
      })

以上就是三种基本的解决方案