promisall 을 이야기 하기전에 잠시 async
, await
를 짚고 넘어가자.
사진의 코드는 여러 비동기 로직이 async-await
를 통해 순차적으로 실행되는 모습이다.
비동기 로직 제어에 어느정도 성공했지만, 순차적으로 실행되는 7회의 post요청으로 시간이 많이 소비된다.
이러한 문제를 해결하기 위해 나온 것이 promise.all
이다.
기존의 async-await
는 직역한 뜻과 같이 비동기 동작이 완료될 때 까지 기다린 후 다음코드를 순차적으로 실행하라는 의미이다.
바꿔 말하면, 로직의 순서가 중요할 때는 분명 메리트 있는 방법이지만, 로직의 순서가 상관없는 과정이라면 시간만 더 잡아먹는 코드가 될 것이 분명하다.
promise.all
은 여러가지 비동기 로직을 병렬적으로 실행하고, 마지막 로직이 끝날 때 완료 상태의 프라미스를 반환한다.
여러 로직중 가장 오래걸리는 로직이 3초가량 소요된다고 치면, 모든 로직을 실행하는 데에 3초남짓한 시간 뿐이 걸리지 않는다는 말이다.
앞서 async-await
가 로직의 순서가 중요하다면 메리트있는 방법이라고한 것을 바꿔말하면,
promise.all
은 로직의 순서가 중요한 경우에는 절대 사용하지 말아야 할 메소드이다.