promise all을 써야하는 상황에 대해서

김태현·2023년 12월 4일

Javascript

목록 보기
2/2

promise를 사용하면 체이닝 되면서 디버깅하는데 힘들어지고,
async await을 사용하면 보기에는 간편해지나 여러개의 비동기 함수를 시행하려할때 동기적으로 직렬적으로 처리되면서 총 시간소요가 증가한다. (물론 async await만 사용하였을때)
그렇다고 여러개의 promise를 따로 따로 promise를 실행해버리면 이 여러개의 promise가 전부 종료되는 타이밍을 알아내는데 문제가 생긴다.

나는 직렬적 동기적으로 처리할 필요가 없는 여러개의 비동기 처리를 하려하는데, 이 비동기 처리들이 모두 완료되었을때의 타이밍을 알아내고 싶을때, Promise all 함수가 빛을 발하는 순간인것 같다.

promise all의 개념은
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

mdn 사이트를 참조해서 공부해보면 좋을것같고,

주목해볼만한 주의점은 바로 여러개의 비동기 처리중 하나가 오류가 나거나 하는 등으로 인해 reject가 발생한다면 그 promise만 reject 처리되는것이 아닌 모든 promise가 reject 처리가 되어버린다. 비록 문제되는 promise가 reject 되기 전에 all안에 들어간 다른 어떤 promise가 성공되었더라도 결국 모두 얄짤없이 reject 처리해버린다.

이미지 출처 https://www.google.com/url?sa=i&url=http%3A%2F%2Fm.blog.naver.com%2F21simon%2F220832328261&psig=AOvVaw09ylWQYBaAgUfEtuqBG4AR&ust=1701766245547000&source=images&cd=vfe&opi=89978449&ved=0CBMQjhxqFwoTCPDBq6-09YIDFQAAAAAdAAAAABAE

이게 싫으면 promise allSettled 함수를 알아보자.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled

그런데 비동기 처리들을 순차적으로도 처리를 하지않는데 다같이 종료되는 타이밍을 이용하면서 그런데 하나가 reject되더라도 다른 비동기 처리들을 진행해야하는 일이 있긴할까싶다. 있으니깐 만들긴했겠지만

아 그리고 promise all의 장점이라고 생각해볼만한 점이 하나 더있다면 하나의 promise가 reject되는 순간에 바로 전체가 reject되어버리기 때문에 빠른 처리를 할수가있다. reject난 promise보다 시간이 오래걸리는 promise의 처리를 기다릴 필요없이 모두 reject 처리가 되는것이다.

이렇게 이야기하고보니 중간에 promise를 처리하다가 reject 해버리는 로직, 과정이 궁금하니 찾아봐야겠다.

게시글을 읽어주셔서 감사합니다 :))))
잘못된 사실이 있으면 댓글달아주시면 감사하겠습니다. 바로 수정해서 반영하겠습니당

profile
처음에는 웹 frontend 분야에 자신있는, 허나 다양한 분야를 경험하고 배우고자 노력하는 공학자 김태현입니다.

0개의 댓글