개발Story
Published 2022. 11. 2. 16:26
[javascript] Promise.all() Javascript/문법

Promise.all()은 비동기 통신을 병렬로 수행하여 순회가능한 promise가 끝나는 시점을 잡을 수 있는 메서드이다.

 

Promise.all() 메서드는 순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환합니다. 주어진 프로미스 중 하나가 거부하는 경우, 첫 번째로 거절한 프로미스의 이유를 사용해 자신도 거부합니다.

 

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values);
});
// expected output: Array [3, 42, "foo"]

 

위 예시와 같이 Promise.all은 return 되는 배열의 순서를 보장합니다.

구문

Promise.all(iterable);

매개변수  

iterable

Array와 같이 순회 가능한(iterable) 객체.

반환값

  • 매개변수로 주어진 순회 가능한 객체가 비어 있으면 이미 이행한 Promise.
  • 객체에 프로미스가 없으면, 비동기적으로 이행하는 Promise. 단, Google Chrome 58은 이미 이행한 프로미스를 반환합니다.
  • 그렇지 않은 경우, 대기 중 Promise. 결과로 반환하는 프로미스는 인자의 모든 프로미스가 이행하거나 어떤 프로미스가 거부할 때 (호출 스택이 비는 즉시) 비동기적으로 이행/거부합니다. "Promise.all의 동기성/비동기성" 예제를 참고하세요. 반환하는 프로미스의 이행 값은 매개변수로 주어진 프로미스의 순서와 일치하며, 완료 순서에 영향을 받지 않습니다. 

Map 을 활용한 Promise.all()

  1. url배열을 fetch를 사용해 promise로 매핑한다.
  2. promise배열을 Promise.all로 감싼다.
  3. Promise.all은 모든 promise 작업이 이행될 때까지 기다린다.
let urls = [
  'https://api.github.com/users/iliakan',
  'https://api.github.com/users/remy',
  'https://api.github.com/users/jeresig'
];
let requests = urls.map(url => fetch(url));

Promise.all(requests)
  .then(responses => responses.forEach(
    response => alert(`${response.url}: ${response.status}`)
  ));

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

https://velog.io/@esc/Promise.all

profile

개발Story

@슬래기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!