异步操作失败但不打断后续操作

76 阅读1分钟

Promise.allSettled 的使用场景一般是需要同时请求一堆接口,然后其中有些接口可能会失败的情况,失败的返回失败,成功的返回成功的结果,失败并不阻塞后续的接口请求,并且每个接口返回的内容都可控。 使用的demo如下:

const test = async () => {
    const a = () => {
        return new Promise<string>((resolve, reject) => {
            setTimeout(() => {
                resolve('success')
            }, 500)
        })
    }

    const b = () => {
        return new Promise<string>((resolve, reject) => {
            setTimeout(() => {
                reject('fail')
            }, 800)
        })
    }

    const c = () => {
        return new Promise<string>((resolve, reject) => {
            setTimeout(() => {
                resolve('success')
            }, 300)
        })
    }

    const resultArr = await Promise.allSettled([a,b,c])
    // 若成功则 status会返回'fulfilled'状态,反之返回'rejected'
    return resultArr.map(e => (e.status === 'fulfilled' ? e.value : e.reason))
}

test()
// console: ['success',reason,'success']