Bluebird Promise FAQ에서 .then(success, failure)가 플래그로 지정되어 있습니다. 안티패턴으로. 특히 try 및 catch 문에 대한 설명을 이해하지 못하는 경우 혼란스러울 수 있습니다.
.then() 호출 콜백에서 오류가 발생하면 거부하는 Promise를 반환합니다. 즉, 성공 로거가 실패하면 오류는 성공에 따른 실패 콜백이 아닌 다음 .catch() 콜백으로 전달됩니다.
.then에 대한 제어 흐름 두 개의 인수와 .then-catch 체인이 있는 경우는 아래 그림과 같습니다.
[.then 및 .then-catch 체인에 대한 제어 흐름 다이어그램 이미지 .then-catch 체인]
이를 동기 코드로 표현하려면:
// some_promise_call().then(logger.log, logger.log) then: { try { var results = some_call(); } catch(e) { logger.log(e); break then; } // else logger.log(results); }
비교해보세요 with:
// some_promise_call().then(logger.log).catch(logger.log) 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에서 `.then(success, failure)`를 안티패턴으로 사용하는 경우는 언제입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!