프로미스-3

박경찬·2022년 7월 30일
0

JavaScript

목록 보기
23/26

프로미스 에러처리

비동기 처리를 위한 콜백 패턴은 에러처리가 곤란하다.!!
그렇지만 프로미스는 에러를 문제없이 처리 할수 있다.

프로미스 후속 처리 메서드은 then, catch, finally 를 사용하여 수행한다. 비동기 처리에서 발생한 에러는 then 메서드의 두 번째 콜백 함수로 처리할 수 있다.

const wrongUrl = "https://jsonplaceholder.typicode.com/XXX/1";

promiseGet(wrongUrl).then(
  (res) => console.log(res),
  (err) => console.log(err)
); // Error 404
// 부적절한 URL이 저장되었기 때문에 에러가 난다.
promiseGet(wrongUrl)
  .then((res) => console.log(res))
  .catch((err) => console.error(err)); // Error 404

위 내용중에 then 메서드 안에 두번쨰 콜백함수에 Error캐치 하기위해 작성했지만 Error 처리를 하지 못하고 코드만 복잡해진다.

catch 메서드를 모든 then 메서드를 호출한 이후에 호출하면 비동기 처리에서 발생한 에러(rejected 상태) 뿐만 아니라 then 메서드 내부에서 발생한 에러까지 모두 캐치 할수 있다.

프로미스 체이닝

promiseGet(`${url}/post/1`)
  .then(({ userId }) => promiseGet(`${url}/users/${userId}`))
  .then((userInfo) => console.log(userInfo))
  .catch((err) => console.error(err));

then=>then=>catch 순서로 후속처리 메서드를 호출했다.
프로미스 후속처리 메서드는 언제나 프로미스를 반환하므로 연속적으로 호출할수있다. 이를 프로미스 체이닝 이라고한다.

then, catch, finally 후속 처리 메서드는 콜백 함수가 반환한 프로미스를 반환한다. 하지만 콜백함수가 프로미스가 아니더라도 암묵적으로 resolve , reject 하여 프로미스를 생성해 반환한다.

프로미스 체이닝을 통해 비동기처리 결과를 전달 받아 처리 하므로 콜백헬이 발생하지 않는다. 하지만 프로미스도 콜백 패턴을 사용하므로 콜백 함수를 사용하지 않는것은 아니다.

0개의 댓글