Node.js에서 일부 HTTP 호출을 수행하고 요청이 실패했는지 여부를 검사하고 싶습니다. 오류로 인해 이 아니며은 반드시 "오류 조건"으로 간주되지만 원하는 것은 이를 기반으로 비즈니스 로직을 실행하십시오.체인의 초기에 어떻게 Promise를 해결할 수 있습니까?
let p = new Promise(function(resolve, reject) {
// In the real implementation this would make an HTTP request.
// The Promise resolution is either a response object or an Error passed to the `error` event.
// The error doesn't reject because the value I'm actually interested in getting is not the response, but whether the HTTP call succeeded or not.
Math.random() <= 0.5 ? resolve({ statusCode: 200 }) : resolve(new Error());
});
p.then(ret => { if (ret instanceof Error) return false; }) // This line should resolve the promise
.then(/* Handle HTTP call success */);
은 기본적으로 내가하고 싶은 말은 내가 오류 개체에 해결하는 경우 만 구제하고 false
를 반환, "그렇지 않으면 (내가 그것을 단순화하기 때문에 분명히이 고안되어 있지만) 다음 코드 비슷한 있습니다. 응답 객체에 좀 더 많은 내용을 지정하고 true
을 반환하거나 false
을 반환 할 수 있습니다.
약속을 일찍 처리하고 나머지 체인을 실행하지 않으려면 어떻게해야합니까? 나는이 모든 잘못에 대해 생각하고 있는가? 나는 당신이 .then()
으로 할 수있는 것과 같은 방식으로 AFAICT를 .catch()
(이 약속은 결국 Promise.all
으로 전달된다) 값을 얻을 수 없기 때문에 HTTP 호출 오류라면 거부하지 않을 것이지만 틀릴 수도있다.
나는 Bluebird, FWIW에 있으니 그로부터 여분의 것들을 자유롭게 사용하십시오. , 단지 그들을 돌려,
p.then(ret => {
if (ret instanceof Error) return false; // This line will resolve the promise
/* else handle HTTP call success, and return true/false or another promise for it */
});