Promise.allSettled()(ES11)

8273 ワード

Promise.allSettled

  • Promise.allSettled()

  • Promise.allSettled()


    ESの新しい特性を学びましたPromise.all()は、非同期タスクを同時に実行する能力を有する.しかし、その最大の問題は、あるタスクに異常(reject)が発生した場合、すべてのタスクが停止し、Promiseが直接reject状態に入ることです.
    シーン:現在、ページには3つのリクエストがあり、それぞれ異なるデータが要求されています.1つのインタフェースサービスが異常であれば、全体が失敗し、データをレンダリングできません.
    Promise.all([
        Promise.reject({
         
            code: 500,
            msg: ' '
        }),
        Promise.resolve({
         
            code: 200,
            data: ['1', '2', '3']
        }),
        Promise.resolve({
         
            code: 200,
            data: ['4', '5', '6']
        })
    ]).then(res => {
         
        console.log(res)
        console.log(' ')
    }).catch(err => {
         
        console.log(err)
        console.log(' ')
    })
    

    同時タスクでは、タスクが正常であっても異常であっても、対応するステータスを返すメカニズムが必要です.
    Promise.allSettled([
        Promise.reject({
         
            code: 500,
            msg: ' '
        }),
        Promise.resolve({
         
            code: 200,
            data: ['1', '2', '3']
        }),
        Promise.resolve({
         
            code: 200,
            data: ['4', '5', '6']
        })
    ]).then(res => {
         
        console.log(res)
        // console.log(' ')
        const data = res.filter(item => item.status === 'fulfilled')
        console.log(data)
    }).catch(err => {
         
        console.log(err)
        console.log(' ')
    })