하얀 코딩

[JavaScript - 22] Promise.prototype.then(), catch(), finally() 본문

JavaScript

[JavaScript - 22] Promise.prototype.then(), catch(), finally()

whitecoding 2023. 1. 12. 00:56

본 내용은 Promise 개념의 내용을 포함하고 있지 않습니다.

Promise를 모른다면 다음 사이트에서 Promise의 개념을 이해하고 보시길 바랍니다.

 

[JavaScript - 21] Promise

Promise 비동기로 작동하는 코드를 제어할 수 있는 다른 방법 중 Promise를 활용하는 방법이 있습니다. Promise는 class이기 때문에 new 키워드를 통해 Promise 객체를 생성합니다. 또한 Promise는 비동기 처

white120.tistory.com


Promise.prototype.then()

executor(실행자)에 작성했던 코드들이 정상적으로 처리가 되었다면 resolve 함수를 호출하고 then()으로 접근할 수 있습니다.

또한 then() 안에서 리턴한 값이 PromisePromise의 내부 프로퍼티 result를 다음 then() 의 콜백 함수의 인자로 받아오고, Promise가 아니라면 리턴한 값을 then()의 콜백 함수의 인자로 받아올 수 있습니다.

 

아래의 예시를 살펴보면서 동작 방식을 확인해보세요.

let promise = new Promise((resolve, reject) => {
	resolve("성공");
});

promise.then(value => {
	console.log(value);
	// "성공"
})

Promise.prototype.catch()

executor에 작성했던 코드들이 에러가 발생했을 경우에는 reject 함수를 호출하고 catch()로 접근할 수 있습니다.

let promise = new Promise(function(resolve, reject) {
	reject(new Error("에러"))
});

promise.catch(error => {
	console.log(error);
	// Error: 에러
})

Promise.prototype.finally()

executor에 작성했던 코드들의 정상 처리 여부와 상관없이 .finally 메서드로 접근할 수 있습니다.

let promise = new Promise(function(resolve, reject) {
	resolve("성공");
});

promise
.then(value => {
	console.log(value);
	// "성공"
})
.catch(error => {
	console.log(error);
})
.finally(() => {
	console.log("성공이든 실패든 작동!");
	// "성공이든 실패든 작동!"
})

Promise chaining

Promise chaining가 필요하는 경우는 비동기 작업을 순차적으로 진행해야 하는 경우입니다. 

Promise chaining이 가능한 이유는 then(), catch(), finally() 의 메서드들은 Promise를 반환하기 때문입니다.

따라서  then()을 통해 연결할 수 있고, 에러가 발생할 경우 catch() 로 처리하면 됩니다.

let promise = new Promise(function(resolve, reject) {
	resolve('성공');
	...
});

promise
  .then((value) => {
    console.log(value);
    return '성공';
  })
  .then((value) => {
    console.log(value);
    return '성공';
  })
  .then((value) => {
    console.log(value);
    return '성공';
  })
  .catch((error) => {
    console.log(error);
    return '실패';
  })
  .finally(() => {
    console.log('성공이든 실패든 작동!');
  });
 

'JavaScript' 카테고리의 다른 글

[JavaScript - 24] async / await  (0) 2023.01.26
[JavaScript - 23] Promise API  (0) 2023.01.26
[JavaScript - 21] Promise  (0) 2023.01.11
[JavaScript - 20] 타이머 API  (0) 2023.01.11
[JavaScript - 19] 동기 / 비동기  (0) 2023.01.11