프로미스(Promise)란?
자바스크립트는 비동기 처리를 위해 콜백함수를 사용한다. 하지만 콜백을 너무 남용하면 콜백 지옥에 빠질 수 있다. 그리고 에러처리 역시 힘들고 여러개의 비동기처리를 한번에 하는데 한계가 있다. 이를 보완하기 위해 사용되는 객체가 프로미스이다.
프로미스의 이점
1) 비동기 처리 시점을 명확하게 표현
2) 연속된 비동기 처리 작업을 수정, 삭제, 추가하기 편하고 유연
3) 비동기 작업 상태를 쉽게 확인
4) 코드의 유지 보수성 증가
예시
resolve가 실행되면 resolve에서 실행한게 value에 들어옴
reject가 실행되면 reject에서 실행한게 reason에 들어옴
catch는 reason만 처리됨
finally는 실패든 성공이든 무조건 동작
이들은 모두 순차실행인데, 병렬실행을 할 수 있다 (All 등)
3개의 프로미스를 순차적으로 만들었다. 3초 뒤에 1번이 실행되고, 그 다음 2초 뒤 2번에 실행되고, 그 다음 1초 뒤 3번이 실행된다.
ALL
all은 전달한 모든 프로미스를 병렬 동작 시키고, 전부 수행이 끝나면 종료된다. 전달된 프로미스들은 서로와 관계 없이 개별 동작을 수행한다.
전달된 프로미스 중 하나라도 reject 상태가 되면 즉시 종료된다. 먼저 'ERROR-1초'는 resolve이기 때문에 넘어가고 그 다음 'ERROR-2초'는 reject이므로 콘솔창에 실패가 뜨고 즉시 종료된다. 그러니 다음 'ERROR-3초'는 전달되지 않는다.
RACE
race는 전달한 프로미스들을 전부 병렬동작 시키고, 제일 빨리 성공(resolve)된 프로미스를 전달(반환)하고 끝난다.
제일 빠른게 1이니 1번을 전달하고 끝난다.
allSettled
전달받은 프로미스가 모두 성공 혹은 실패가 되면 처리결과를 배열로 반환
'JavaScript' 카테고리의 다른 글
[JavaScript] XHR (XML Http Request) (0) | 2024.01.22 |
---|---|
[JavaScript] Image 미리보기 (0) | 2023.07.12 |
[JavaScript] 캐러셀(이미지 슬라이드) 만들기 (0) | 2023.07.10 |
[JavaScript] 간단한 자동차 게임 만들기 (0) | 2023.07.08 |
[Javascript] localStorage (0) | 2023.07.05 |