2015-01-05 3 views
2

저는 다른 약속에 의존하여 일련의 약속을 지키고 전체 순서의 완료를 나타내는 단일 약속을 얻기 위해 함께 "다음"을 함께 갖고 싶습니다. 이것은 잘 작동하는 것 같지만 약속에서 벗어나기 위해 실패한 것처럼 보일 수는 없습니다. 문서에서해야하는 것처럼 보입니다. 여기에 제가 고민하는 것을 설명하는 코드 샘플이 있습니다.

var deferred = $q.defer(); 
    deferred.resolve(); 

    var resolvedPromise = deferred.promise; 
    var rejectedPromise = $q.reject('rejected'); 

    var aPromise = resolvedPromise.then(rejectedPromise); 

    aPromise.then(function() { 
    console.log('promise fulfilled'); 
    }, function() { 
    console.log('promise rejected'); 
    }); 
나는 "약속이 거부"기대

The same in Plunker

로그인해야합니다, 대신 나는 "성취 약속"을 얻는다. 내가 원하는 행동을 어떻게 달성 할 수있는 아이디어가 있습니까? 당신이 해결 하나의 성공 콜백에서하지 반환 거부 ​​약속을하기 때문에입니다

답변

2

:

var aPromise = resolvedPromise.then(function() { 
    return rejectedPromise; 
}); 

은 또한 점에 유의, 당신은 간단하게 사용할 수 있습니다, 확인 된 약속을 구성하는

var resolvedPromise = $q.when('result'); 
11

JBNizet의 답변은 좋지만 뭔가 명확히해야한다고 생각합니다.

then 기능 약속은 을 무시합니다. 기능 이외의 내용은 무시됩니다.. 따라서 코드가있는 경우 :

myPromise.then(otherPromise) 

전체 otherPromise 부분은 완전히 무시됩니다. Promises/A +가 catch 메서드를 지정하지 않았기 때문에 약속 값 자체를 변경하지 않고도 오류를 처리하기 위해 .then(null, errHandler)을 수행 할 수 있어야했습니다.