본문 바로가기

TIL/기록

[TIL] Promise

동기는 순차적으로 진행,

비동기는 a Task가 실행되고나서 끝나기도 전에 b Task가 실행되고, b Task가 끝나기도 전에 c Task가 실행된다.

 

비동기 처리를 위한 또 다른 패턴으로 프로미스(Promise)를 도입했다.

프로미스는 콜백 패턴이 가진 단점을 보완하고 비동기 처리 시점을 명확하게 표현할 수 있다.

Promise는 생성자 함수를 통해 인스턴스화한다.

Promise 생성자 함수는 비동기 작업을 수행할 콜백 함수를 인자로 전달받는데

이 콜백함수는 resolve와 reject함수를 인자로 전달받는다.

// Promise 객체 생성
const promise = new Promise((resolve, reject) => {
	//비동기 작업을 수행
    
    if (/* 비동기 작업 성공 */) {
    	resolve('result');
    } else {//비동기 작업 실패
    	reject('fail reason');
    }
}

 

대기(pending) : 비동기 처리가 아직 수행되지 않은 상태
이행(fulfilled) : 비동기 처리가 성공
거부(rejected) : 비동기 처리가 실패

 

  • Promise 호출 

1. 비동기 함수 내에서 Promise 객체를 생성 => 비동기 처리를 구현. 이때 비동기 처리에 성공하면 resolve 메소드를 호출

2. resolve 메소드의 인자로 비동기 처리 결과를 전달, 이 처리 결과는 Promise 객체의 후속 처리 메소드로 전달.

3. 비동기 처리에 실패 => reject 메소드 호출. reject 메소드의 인자로 에러 메시지를 전달. 이 에러 메시지는 Promise 객체의 후속 처리 메소드로 전달

후속 처리 메소드 : then(Promise 반환)catch(예외)

 

  • Promise 체이닝 

비동기 함수를 호출해야 하는 경우, 함수의 호출이 중첩되면 콜백지옥 된다.

Promise는 then이나 catch로 메소드를 chainning(체이닝)하여 여러 개의 프로미스를 연결하여 사용해 콜백지옥을 해결한다.

then 메소드는 기본적으로 Promise를 반환하는데, 여러개도 사용할 수 있다.

 

 

 

 

오늘 강의를 들었는데 아주 이해가 잘됐고, 재밌어서 프로미스를 정리해놨다.

'TIL > 기록' 카테고리의 다른 글

[TIL] delete  (0) 2024.01.16
[TIL] JSON  (0) 2024.01.15
[TIL] .gitignore을 써도 안될 때  (1) 2024.01.11
[TIL] branch  (1) 2024.01.10
[TIL] module import / export  (0) 2024.01.09