>웹 프론트엔드 >JS 튜토리얼 >Promise Handling에서 '.then(success, failure)'가 안티 패턴으로 간주되는 이유는 무엇입니까?

Promise Handling에서 '.then(success, failure)'가 안티 패턴으로 간주되는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-25 18:42:14769검색

Why is `.then(success, fail)` Considered an Anti-pattern in Promise Handling?

Promise 처리에 .then(success, failure) 사용의 단점

질문:

Bluebird Promise 문서에서 .then(success, 실패)는 안티패턴으로 표시됩니다. 그 이유는 무엇입니까?

답변:

권장되는 .then(success).catch(fail) 연결과 달리 .then(success, failure)를 사용하면 제어 흐름 문제가 발생합니다.

  • 성공 콜백에 오류가 있으면 다음으로 전파됩니다. .catch() 핸들러, 실패 콜백을 효과적으로 건너뛰기.

제어 흐름 비교:

.then(성공, 실패) 사용:

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

사용 .then(success).catch(fail):

try {
    var results = some_call();
    logger.log(results);
} catch (e) {
    logger.log(e);
}

이유:

안티패턴은 오류 처리를 단일 최종 catch 핸들러로 제한하므로 권장되지 않습니다. 그러나 다음과 같은 시나리오에서 유용할 수 있습니다.

  • 특정 콜백 단계에서 오류를 처리하려는 경우.
  • 오류 및 오류가 없는 경우에 대해 서로 다른 처리가 필요합니다(분기 제어 흐름).

개선:

콜백 반복을 방지하려면 다음을 사용할 수 있습니다. 다음 패턴:

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

또는 이 목적으로 .finally() 메서드를 활용할 수도 있습니다.

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

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