Promise static 함수

김현준·2024년 3월 2일

비동기 시리즈

목록 보기
4/6

Promise.all, Promise.allSettled, Promise.any, Promise.race

순차적 프로미스의 문제점

이 코드를 보면

getName가 끝나고 getTodo가 실행되고 있다.

하지만 이렇게 병렬적으로 실행되려면 어떻게 해야할까

Promise.all([프로미스들])


이 코드를 보면

getName가 끝나고 getTodo가 실행되고 있다.

하지만 이렇게 병렬적으로 실행되려면 어떻게 해야할까

Promise.all([프로미스들])


여러 개의 프로미스들을 동시에 처리할 수 있다.(병렬처리)

ex) const promise = Promise.all([getName(), getTodi()])

만약 배열 안의 프로미스 중에 하나라도 실패한다면 Promise.all로부터 반환된 promise도 실패하게 된다.
catch 안에는 가장 먼저 실패한 프로미스의 에러가 들어간다.

이 경우에 배열 안에서 어떤 프로미스가 실패했고 성공했는지 알고 싶다면?
Promise.allSettled([])
인자로 전달된 프로미스들이 모두 완료될 때까지 기다린다.

이 경우에 배열 안에서 어떤 프로미스가 실패했고 성공했는지 알고 싶다면?

Promise.allSettled([])

인자로 전달된 프로미스들이 모두 완료될 때까지 기다린다.


이렇게 실패한 getName는 rejected가 나오고, 성공한 getTodo는 fulfilled가 나온다.

Promise.any([])

인자로 전달한 프로미스 중에 가장 먼저 resolve가 된 것의 값을 가진다.

그러므로 여기서 data를 조회해보면 이름인 ‘철수’가 나온다.
왜냐하면 getNmame의 setTimeout은 1초, getTodo의 setTimeout은 2초로 설정했기 때문

Promise.any는 배열 안의 모든 프로미스들이 실패해야 에러가 나온다.
에러 내용은 All Promises were rejected(모든 프로미스들이 실패했습니다.)가 나온다.

Promise.race([])

전달해준 프로미스끼리 경주를 시켜서 가장 빨리 되는 프로미스의 결과를 반환한다.

가장 빨리 완료된 프로미스가 성공하면 그 값을, 실패하면 실패를 반환한다.

data의 결과는 1초로 설정한 getName의 값이 나온다. 하지만 다른 경우엔 네트워크 상태에 따라 getTodo의 값이 나올 수도 있다.
에러의 값은 가장 빨리 작업이 끝나고 실패한 것의 에러를 반환한다.

profile
기록하자

0개의 댓글