티스토리 뷰
promise.all()
주어진 모든 프로미스가 이행하거나, 한 프로미스가 거부될 때까지 대기하는 새로운 프로미스를 반환한다.
반환하는 프로미스가 이행한다면, 매개변수로 제공한 프로미스 각각의 이행 값을 모두 모아놓은 배열로 이행한다. 배열 요소의 순서는 매개변수에 지정한 프로미스의 순서를 유지한다.
반환하는 프로미스가 거부된다면, 매개변수의 프로미스 중 거부된 첫 프로미스의 사유를 그대로 사용한다.
순회 가능한 객체를 인자로 받아 객체에 주어진 모든 프로미스를 이행한 후 결과를 반환한다. 주어진 프로미스 중 하나라도 reject 될 경우 reject 된 값을 반환한다.
매개변수 : 순회 가능한(iterable) 객체
반환 값 : promise
전달받은 비동기 작업 여러 개가 모두 완료될 때까지 기다렸다 다음 동작을 하려 할 때 사용한다.
promise.all()은 순서 보장이 될까?
// 실행 코드 1 - promise 안에서 배열에 push 하고 출력했을 때
const seconds = [1000, 2000, 3000, 4000, 5000, 200, 100];
const idArr = [1, 2, 3, 4, 5, 6, 7];
const promiseArr = [];
const pushArr = [];
const makePromise = (id, second) => {
return new Promise((res, rej)=>{setTimeout(()=>{
res(pushArr.push(id))
}, second)})
}
for (let i = idArr.length - 1; i > -1; i--) {
promiseArr.push(makePromise(idArr[i], seconds[i]));
}
Promise.all(promiseArr).then(()=>{
console.log(pushArr);
});
// 실행결과
// [7, 6, 1, 2, 3, 4, 5]
// 실행 코드 2 - promise resolve 데이터를 출력했을 때
const seconds = [1000, 2000, 3000, 4000, 5000, 200, 100];
const idArr = [1, 2, 3, 4, 5, 6, 7];
const promiseArr = [];
const pushArr = [];
const makePromise = (id, second) => {
return new Promise((res, rej)=>{setTimeout(()=>{
res(id);
}, second)})
}
for (let i = idArr.length - 1; i > -1; i--) {
promiseArr.push(makePromise(idArr[i], seconds[i]));
}
Promise.all(promiseArr).then((resArr)=>{
console.log(resArr);
});
// 실행 결과
// [7, 6, 5, 4, 3, 2, 1]
promise 객체에서 push를 실행하도록 한 pushArr은 실행된 순서대로 데이터가 담겨있고
promise 객체가 resolve 되어 반환하는 resArr은 promise를 실행한 순서대로 데이터가 담겨있다.
promise.all()에 넘겨준 promise들은 동작은 비동기로 실행되어 순서가 보장되지 않지만 resolve된 반환 데이터를 사용하면 순서를 보장할 수 있다.
728x90
'TIL' 카테고리의 다른 글
TIL 230827 [Vue + TS] v-for를 쓸 때 item unknown 해결하기 (0) | 2023.08.27 |
---|---|
TIL 230803 [Vue] <template> == Fragment tag (0) | 2023.08.03 |
TIL 230801 [Vue] v-for, ref, v-model, vue 문법 (0) | 2023.08.01 |
TIL 230731 [Vue] emit으로 부모 컴포넌트 함수 실행하기 (0) | 2023.07.31 |
TIL 230727 [Vue] 자식 컴포넌트에게 props 전달하기 (0) | 2023.07.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬
- 구름에듀
- 드림코딩
- 제이쿼리
- TS
- React
- map
- 리액트
- 깃
- Typescript
- 저스트코드
- html
- vscode
- Til
- 김버그
- 코드잇
- 자바스크립트
- Python
- scss
- CSS
- javascript
- 제로초
- 코딩앙마
- js
- 회고
- 비주얼스튜디오코드
- git
- 스파르타코딩클럽
- vue
- 타입스크립트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함