Promise.allSettled()(ES11)
8273 ワード
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(' ')
})
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(' ')
})