all 안에 주어진 배열에 있는 모든 프로미스를 실행한 후에 그 결과를 배열에 있는 순서대로 반환
배열에 있는 요청 중 하나라도 reject 가 되면 다른 요청의 성공여부에 상관없이 전부 reject
코드 예시
//Promise.all( 순회가능한 객체/ 배열 )
const promise1 = Promise.resolve("Test Promise.all()");
const promise2 = 5;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
// Array ["Test Promise.all()", 5, "foo"]
await 를 3개를 사용한 것과 같은 결과를 보여주지만,
좀 더 복잡한 코드를 수행해야할 때는 Promise.all([promise1, ... ]) 이 더 빠르다.
사용하는 이유 및 상황
처리속도
만약에 await 를 이용하여 3개의 요청을 실행을 하면 각 요청이 순서대로 실행이된다.
하지만, Promise.all()을 이용하여 요청들을 실행하면
Promise.all() 안에 있는 요청들만 병렬로 실행되고 이 요청이 완성될때까지 다른 요청들은 실행 되지 않는다.
이로 인해 요청들을 수행하는데 소요되는 시간이 더 짧아지고 결과를 한꺼번에 처리 가능하다.
- 필요한 요소들을 한꺼번에 처리할 때 유리하다.
(사용되는 예시)
게시물을 생성할 때 -> hashtag 정보 검색/ 생성, 카테고리 정보 검색, 새로운 게시물 데이터 생성 필요
-> 3가지를 Promise.all() 을 이용하여 한번에 실행하고 그 결과들을 수집및 처리하여 db에 저장
배열 속의 모든 프로미스의 결과가 필요한 경우
'프로그래밍 > JavaScript' 카테고리의 다른 글
[ JS ] 불변객체 immutable object (1) | 2024.05.11 |
---|---|
[ JS ] Promise.allSettled 사용하는 이유 (0) | 2024.05.06 |
[ JS ] Promise 설명 (0) | 2024.05.05 |
[ JS ] 정렬 sort( ) (0) | 2024.04.13 |
[JS] call, apply, bind (0) | 2024.03.06 |