본문 바로가기
JavaScript/기초

자바스크립트[기초] 프로미스 후속 처리 메소드 then | catch | finally

by 뿌비 2022. 5. 1.
728x90

프로미스 후속 처리 메서드란? 

  • 프로미스가 fulfilled(성공) 상태 일 때는 프로미스의 처리 결과(데이터)를 가지고 무언가를 해야 하고 프로미스 rejected(실패) 상태 일 때는 프로미스 처리결과(에러)를 가지고 후속 처리를 해주어야 하는데 이때 필요한 후속 처리 메서드가 then | catch | finally이다 
  • 프로미스의 비동기 처리 상태가 변화하면 후속 처리 메소드에 인수로 전달한 콜백 함수가 선택적으로 호출된다 이때 후속 처리 메서드의  콜백 함수에 프로미스의 처리 결과가 인수로 전달된다 
  • 모든 후속 처리 메소드는 프로미스를 반환하며 비동기로 동작한다 

. then()

  • 프로미스를 반환한다
  • then의 콜백 함수가 프로미스를 반환하면 그대로 반환하고 콜백 함수가 프로미스가 아닌 값을 반환하면 그 값을 암묵적으로 resolve 또는 reject 하여 프로미스를 생성해서 반환한다 
  • 두 개의 콜백 함수를 인자로 받는다 
    • 첫 번째 콜백 함수는 프로미스가 fulfilled(성공) 상태(resolve 함수가 호출된 상태)가 되면 호출된다 이때 콜백 함수는 프로미스의 비동기 처리 결과를 인수로 전달받는다 
    • 두 번째 콜백 함수는 프로미스가 rejected(실패) 상태(reject 함수가 호출된 상태)가 되면 호출된다 이때 콜백 함수는 프로미스의 에러를 인수로 전달받는다
    • 즉, 첫 번째 콜백 함수는 성공 시 성공 처리 콜백 함수이고 두 번째는 실패 시 실패 처리 콜백 함수이다
// fulfilled
new Promise(resolve => resolve('fulfilled'))
	.then(v => console.log(v), e => console.error(e)); // fulfilled
    
// rejected
new Promise((_, reject => reject(new Error('rejected')))
	.then(v => console.log(v), e => console.error(e)); // Error:rejected

. catch()

  • 한 개의 콜백 함수를 인수로 전달받는다
  • 프로미스가 rejected(실패) 상태인 경우만 호출된다 
  • 언제나 프로미스를 반환한다 
/* 아래 두개의 코드는 동일한 코드 이다 */
// rejected (catch 사용)
new Promise((_, reject) => reject(new Error('rejected')))
	.catch( e => console.log(e)); // Error : rejected
// rejected (then 사용)
new Promise((_, reject) => reject(new Error('rejected')))
	.then(undefined, e => console.log(e)); // Error : rejected

. finally()

  • 한 개의 콜백 함수를 인자로 전달받는다
  • 프로미스의 성공/실패 와 상관없이 무조건 한번 호출된다.
  • 프로미스의 상태와 상관없이 공통적으로 수행해야 할 처리 내용이 있을 때 유용하다 
  • 언제나 프로미스를 반환한다
new Promise(() => {})
	.finally(() => console.log('finally')); // finally

 

728x90