>웹 프론트엔드 >JS 튜토리얼 >'then(성공, 실패)'는 언제 Promise의 안티패턴이 되나요?

'then(성공, 실패)'는 언제 Promise의 안티패턴이 되나요?

DDD
DDD원래의
2024-12-22 06:07:12564검색

When is `then(success, fail)` an Antipattern for Promises?

Promise의 .then(success, failure) 구문은 언제 Promise의 안티패턴으로 간주됩니까?

Promise의 .then(success, failure) 구문은 안티패턴으로 볼 수 있습니다. 어떤 경우에는. 이유를 살펴보고 .then().catch() 접근 방식과 비교해 보겠습니다.

제어 흐름 차이점

.then(success, failure)은 콜백 함수가 거부하는 경우 약속을 반환합니다. 오류가 발생합니다. 따라서 성공 로거가 실패하면 오류는 실패 콜백이 아닌 후속 .catch() 핸들러로 전달됩니다.

안티패턴 시나리오

다음 시나리오에서는 .then( 성공, 실패) 문제가 발생합니다:

some_promise_call()
.then(function(res) { logger.log(res) }, function(err) { logger.log(err) })

성공 로깅 기능이 실패하면 실패로 인해 오류가 포착되지 않습니다. 콜백이지만 체인의 다음 .catch() 핸들러에 의해 발생합니다. 이로 인해 의도된 오류 처리 논리가 중단될 수 있습니다.

.then().catch()를 선호합니다

대신 .then() 및 .catch()를 별도로 사용하는 것이 좋습니다.

some_promise_call()
.then(function(res) { logger.log(res) })
.catch(function(err) { logger.log(err) })

이 경우 .catch() 핸들러는 성공 로깅 기능에서 발생하는 모든 오류도 포착합니다. 이렇게 하면 모든 오류가 일관된 방식으로 처리됩니다.

예외 처리 의도

.then().catch() 구문이 더 나은 오류 처리를 제공하는 반면, .then(success, failure) 안티패턴은 다음과 같은 상황에서 유용할 수 있습니다.

  • 주어진 오류를 구체적으로 처리합니다. 단계.
  • 오류 발생 여부에 따라 다양한 조치를 취하세요.

그러나 이 패턴은 제어 흐름에 분기를 도입하므로 바람직하지 않을 수 있다는 점을 기억하는 것이 중요합니다. 특정 상황에서.

대체 옵션

.then(성공, 실패), .done() 또는 .finally() 메소드를 사용하여 완료 또는 오류를 일관되게 처리할 수 있습니다.

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

// Handle completion always, regardless of errors
some_promise_call()
   .finally(function() {
       logger.log('Promise completed');
   });

위 내용은 'then(성공, 실패)'는 언제 Promise의 안티패턴이 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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