2011-12-13 6 views
2

Deferred 개체에는 두 개의 주 콜백 풀인 doneCallbacksfailCallbacks이 있습니다. 두 풀은 "선형"입니다. 콜백은 주어진 순서대로 차례로 저장됩니다.`Deferred`를 사용한 오류 처리

이 선형 구조는 오류를 처리 할 때 고려해야 할 "나무와 같은"구조에 맞지 않는 것처럼 보입니다. 모든 단계에서 실패와 합격의 두 가지 경우가 있습니다.

if(err) { 
    // stuff 
    if(err) { 
      // stuff 
    } else { 
      // stuff 
    } 
else { 
    // stuff 
    if(err) { 
      // stuff 
    } else { 
      // stuff 
    } 
} 

이 때문에 Deferred의의 부과 선형성, 그들이 오류 처리에 매우 적합하지 않은 것 같다. 나는 무엇인가 내려다보고 있냐?

+0

달성하려는 목표는 무엇입니까? –

답변

5

그것은 조금 말의이다 그러나 이것은 $.when()에 대한 jQuery를 문서에서입니다 : 여러 이연 객체가 jQuery.when에 전달되는 경우

, 방법은 새로운 "마스터"에서 약속 반환 이 전달 된 모든 Deferreds의 집계 상태를 추적하는 지연된 개체 입니다. Deferreds 중 하나가 거부되는 즉시 모든 Deferreds가 해결하거나 마스터 Deferred를 거부하면 메서드는 마스터 Deferred를 해결합니다. 마스터 지연이 해결 된 경우 jQuery.when에 전달 된 모든 지연의 해결 된 값을 으로 전달했습니다. 예를 들어 Deferreds가 jQuery.ajax() 요청 인 경우 인수는 요청의 jqXHR 객체가되고 인수 목록에 주어진 순서가됩니다. Deferreds 하나가 거부 다중 Deferreds 경우

, jQuery.when 즉시 마스터 용 failCallbacks를 발생 지연된. Deferreds 중 일부는 아직 그 지점에서 으로 해결되지 않을 수 있습니다. 완료되지 않은 Ajax 요청을 취소하는 등 사례에 대한 추가 처리를 수행해야하는 경우 을 클로저의 기본 jqXHR 객체에 유지하고 failCallback에서 을 검사/취소 할 수 있습니다.

소스하십시오 deferred 객체가 오류가 해결되는지

http://api.jquery.com/jquery.when/ 그래서 다음 failCallbacks는 그것이 당신에게 달려 년대 master deferred 화재가 가능-않은 해결 deferred의 수행 할 작업을 결정.