Promise allSettled
Promise allSettled는 Promise all과 다르다. Promise.all은 안의 array에 있는 모든 promise들이 성공하면 response를 반환하고 array중 하나라도 에러를 낸다면 전체에 에러가 발생한다.
const p = Promise.all([
fetch("https://yts.mx/api/v2/list_movies.json"),
fetch("https://yts.mx/api/v2/list_movies.json"),
fetch(), // error
])
.then((response) => console.log("success! ", response))
.catch((e) => console.log("error: ", e));
error: TypeError: Failed to execute ‘fetch’ on ‘Window’: 1 argument required, but only 0 present.
Promise allSettled는 이와 달리 개별 promise의 결과를 오브젝트 형식으로 반환한다.
const p = Promise.allSettled([
fetch("https://yts.mx/api/v2/list_movies.json"),
fetch("https://yts.mx/api/v2/list_movies.json"),
fetch(), // error
])
.then((response) => console.log("success! ", response))
.catch((e) => console.log("error: ", e));
success! (3) [{…}, {…}, {…}]
0:{status: ‘fulfilled’, value: Response}
1:{status: ‘fulfilled’, value: Response}
2:{status: ‘rejected’, reason: TypeError: Failed to execute ‘fetch’ on ‘Window’: 1 argument required, but only 0 present. at <…}
Promise allSettled는 에러와 상관없이 모든 promise가 끝나면 success를 반환한다.
모든 promise가 잘 작동되는지 확인하려면 Promise allSettled를 사용하고 모든 Promise가 동시에 동작하는지만 환인하려면 Promise.all을 사용하는 것이 좋다.
Promise all은 서로 상관이 있는 promise들을 동작시킬 때 사용하고 Promise allSettled는 promise들이 서로 상관이 없는 경우 사용하는것이 좋다.