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);
매개변수
- 매개변수로 주어진 순회 가능한 객체가 비어 있으면 이미 이행한 Promise.
- 객체에 프로미스가 없으면, 비동기적으로 이행하는 Promise. 단, Google Chrome 58은 이미 이행한 프로미스를 반환합니다.
- 그렇지 않은 경우, 대기 중인 Promise. 결과로 반환하는 프로미스는 인자의 모든 프로미스가 이행하거나 어떤 프로미스가 거부할 때 (호출 스택이 비는 즉시) 비동기적으로 이행/거부합니다. "Promise.all의 동기성/비동기성" 예제를 참고하세요. 반환하는 프로미스의 이행 값은 매개변수로 주어진 프로미스의 순서와 일치하며, 완료 순서에 영향을 받지 않습니다.
Map 을 활용한 Promise.all()
- url배열을 fetch를 사용해 promise로 매핑한다.
- promise배열을 Promise.all로 감싼다.
- 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
'Javascript > 문법' 카테고리의 다른 글
[javascript] structuredClone()-새로운 객체 복사 방법 (0) | 2023.01.03 |
---|---|
[JavaScript] this (0) | 2023.01.02 |
[javascript] 정규표현식 (0) | 2022.08.28 |
[javascript] optional chaining(?) (0) | 2022.08.28 |
[javascript] scroll event(등록, 삭제) (0) | 2022.07.31 |