>웹 프론트엔드 >JS 튜토리얼 >JavaScript Promise에서 `.then(success, failure)`가 안티패턴인 이유는 무엇입니까?

JavaScript Promise에서 `.then(success, failure)`가 안티패턴인 이유는 무엇입니까?

DDD
DDD원래의
2024-12-31 16:45:09186검색

Why is `.then(success, fail)` an Antipattern in JavaScript Promises?

안티패턴: Promise의 .then(성공, 실패)

.then(성공, 실패)를 피하기 위한 인수

Bluebird promise FAQ에서는 .then(success, 실패)를 안티패턴으로 사용합니다. try-catch 블록은 유사해 보일 수 있지만 차이점이 있습니다.

제어 흐름 차이점:

.then(success, failure)는 다음과 같은 경우 거부되는 약속을 반환합니다. 성공 콜백에서 오류가 발생합니다. 즉, 성공 로거가 실패하면 오류가 실패 콜백이 아닌 .catch() 콜백으로 전달됩니다.

제어 흐름 다이어그램:

[ 그런 다음 두 개의 인수로](https://i.sstatic.net/WAcpP.png)

[Then-catch chain](https://i.sstatic.net/wX5mr.png)

동기식:

// then: { try ... catch(e) { ... } else ... }
try { var results = some_call(); } catch(e) { logger.log(e); break then; } // else logger.log(results);

예외 처리:

.catch() 로거는 성공의 예외도 처리합니다. 로거 호출은 보다 포괄적인 오류 처리 메커니즘을 제공합니다.

안티패턴의 유용성 예측

안티패턴은 일반적으로 권장되지 않지만 다음과 같은 경우에 유용할 수 있습니다.

  • 단계별 오류를 처리하려고 합니다.
  • 오류 발생 여부에 따라 다른 조치를 취해야 합니다.

주의 사항: 이 접근 방식에서는 제어 흐름에 분기가 발생한다는 점에 유의하세요.

.then의 대안(성공, 실패)

코드 중복을 피하려면 .catch 및 .done 사용을 고려하세요.

some_promise_call()
   .catch(function(e) {
       return e; // it's OK, we'll just log it
   })
   .done(function(res) {
       logger.log(res);
   });

또는 .finally()를 선택하여 성공 및 실패 시나리오를 모두 처리할 수도 있습니다.

위 내용은 JavaScript Promise에서 `.then(success, failure)`가 안티패턴인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.