비동기 함수를 사용하고자하는 nodeJS 프로젝트가 있습니다. 즉, Q 라이브러리를 사용하고 있습니다.Qchedferred로 오류 잡기
저는 someFunction()이라는 함수를 가지고 있는데, 약속을 되찾고 싶습니다. 당시 α- 함수로, 나는 그 약속이 해결되거나과 같이 거부되었는지 여부를 확인할 수 있습니다 : 나는 직관적으로 위에있는 기능을 기대
someFunction()
.then(
function(results) {
console.log("Success!");
},
function (error) {
console.log("An error occurred, and I would wish to log it for example");
}
);
오류 기능은 모든 가능한 오류를 잡을 것이다. 따라서 someFunction 내부에서 예외가 발생하면 오류 함수가 실행됩니다 ('then'다음의 두 번째 함수). 그러나 이것이 사실이 아닌 것처럼 보입니다.
예를 들어,이 된 SomeFuncion가 너무로 정의 될 것이다 가정 해 봅시다 :
function someFunction() {
var deferred = Q.defer();
throw new Error("Can't bar.");
deferred.resolve("success");
}
을 지금은 상위 코드 블록에서 수행과 같은 기능 된 SomeFuncion()를 호출하는 경우, 그것은 오류 기능이 실행되지 않습니다. 왜 그런가요? 오류를 잡으려고 약속의 일부가 Q.deferred가 아닌가? 발생하는 모든 오류를 수동으로 거부해야하는 이유는 무엇입니까? someFunction의 전체 내용을 try/catch 절에 설정 한 다음 지연을 거부 할 수 있다는 것을 알지만, 그렇게 잘못 생각합니다! 더 좋은 방법이 있어야하며, 여러분 중 일부는 그것을 알고 있습니다.
이 정보를 사용하여 deferred.reject 및 deferred.resolve가 사용되는 의미가 무엇인지 생각하기 시작했습니다. 그것은 심지어 예외를 잡기위한 것입니까? 난 그냥 모든 오류 케이스를 수동으로 통과해야하고, 그들에 deferred.reject를 호출? 이것이 어떻게 전문적으로 다루어 져야하는지 듣고 싶습니다. 예외 발생의
deferred.reject("error");
intead :
이가) 어떤 약속을 돌려주는 기능을 넣지해야하는 이유를 정확히와 b)는 (HTTP [deferreds을 통해 약속 생성자를 선호한다] : 그것은 실행 프로그램 기능에서 동기 예외를 포착 할 수 있다는 이점이있다 : //stackoverflow.com/q/28687566/1048572) – Bergi
하지만 약속하지 않은 함수가 throw되지 않는다는 것을 어떻게 보장 할 수 있습니까? 내 말은 당신이 외부 라이브러리를 사용할 수 있다는 말인가요?하지만 당신이 올바른 길을 가고 있다고 생각합니다. 아마도 대답을 줄 수있을 것입니다. –
오류를 디버깅/제거하고 try..catch-block에 코드를 포함시키고 오류를 처리함으로써 래핑합니다. 어쩌면'Q.reject (error)'를 돌려 주면된다. – Thomas