Promise.all() 은 요청한 것이 모두 성공해야 값을 반환하므로 요청한 모든 값이 필요할 때 사용을 하면 좋다.
Promise.allSettled() 은 요청이 성공하던 실패를 하던 모든 값을 반환해준다.
코드예시
const urls = [
'https://api.github.com/users/iliakan',
'https://api.github.com/users/Violet-Bora-Lee',
'https://no-such-url'
];
Promise.allSettled(urls.map(url => fetch(url)))
.then(results => { // (*)
results.forEach((result, num) => {
if (result.status == "fulfilled") {
alert(`${urls[num]}: ${result.value.status}`);
}
if (result.status == "rejected") {
alert(`${urls[num]}: ${result.reason}`);
}
});
});
결과
[
{status: 'fulfilled', value: ...응답...},
{status: 'fulfilled', value: ...응답...},
{status: 'rejected', reason: ...에러 객체...}
]
※ 스펙에 추가된 지 얼마 안 된 문법이라 지원이 안되면 구현해야한다고 한다.
//https://ko.javascript.info/promise-api#ref-1314
if(!Promise.allSettled) {
Promise.allSettled = function(promises) {
return Promise.all(promises.map(p => Promise.resolve(p).then(value => ({
status: 'fulfilled',
value
}), reason => ({
status: 'rejected',
reason
}))));
};
}
사용하는 이유 및 상황
모든 값이 무조건 다 필요하지 않는 경우.
실패한 경우에 다르게 처리를 해줄 필요가 있는 경우.
(예시) 한 해쉬태그가 있는지 조회를 했을 때 없는경우 -> 해당 해쉬태그를 등록
참고자료
https://ko.javascript.info/promise-api#ref-1314
'프로그래밍 > JavaScript' 카테고리의 다른 글
[ JS ] 원시값, 참조값, 얕은 복사, 깊은 복사 (0) | 2024.05.20 |
---|---|
[ JS ] 불변객체 immutable object (1) | 2024.05.11 |
[ JS ] Promise.all() 사용하는 이유 (0) | 2024.05.06 |
[ JS ] Promise 설명 (0) | 2024.05.05 |
[ JS ] 정렬 sort( ) (0) | 2024.04.13 |