2014-10-14 5 views
0

AngularJS의 $q "then"메소드는 새로운 약속 (https://docs.angularjs.org/api/ng/service/ $ q "Promise API"섹션)을 반환합니다.. anglesJS 약속 체인을 거부하십시오.

// method somewhere in MyService service 
// ... 
loadItem = function() { 
    return OtherService.load().then(function(item) { 
     item.preprocessed = true; 
     return item; 
    }); 
} 
// end of loadItem method 

// Somewhere along the controller: 
MyService.loadItem().then(function(item) { 
    // do something with an item... 
    alert(item.preprocessed); 
}, function(error) { 
    alert('Error!'); 
}) 

지금, 나는 약속 반환 값에 대한 몇 가지 처리를하고 싶은, 그러나 동시에 나는 거부 날에하지 않고 약속의 체인을 통해 푸시 할 :

같은 코드의 조각을 고려 모든 단계에서 약속을 수동으로 거부하십시오. 위의 예에서 항목이로드 된 경우 전처리 된 속성이 true로 설정되고 컨트롤러 then() 메서드의 올바른 처리기가 실행되지만 문제가 발생하여 OtherService.load()의 결과가 거부되면 컨트롤러 코드가 실행되지 않습니다.

이 문제를 극복 할 수있는 방법이 있습니까? 거부가 통과 할 수 있도록 허용하는 구문이 있습니까?

답변

1

오류 콜백에서 then의 호출의 일부로 반환 약속을 반환하기 때문에이

return OtherService.load().then(function(item) { 
     item.preprocessed = true; 
     return item; 
    }, 
    function(error) { 
     return $q.reject(error); 
    }); 

을 그리고 오류 콜백 컨트롤러에 화재 것입니다.

관련 문제