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()를 별도로 사용하는 것이 좋습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!