2011-12-13 14 views
2

Deferredオブジェクトには、2つのメインプールコールバック、すなわちdoneCallbacksfailCallbacksがあります。両方のプールは「線形」です。コールバックは、与えられた順序で次々に格納されます。`Deferred`を使用したエラー処理

この線形構造は、エラーを処理する際に考慮する必要のあるツリー状構造に反しているようです。すべてのステップで、失敗とパスの2つのケースがあります。

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

理由Deferred秒の課せられた直線の、彼らはエラー処理のために非常に適していないようです。私は何か見落としていますか?

+0

達成しようとしていることはありますか? –

答えて

5

それは少しくどいですが、これは$.when()のためのjQueryのドキュメントからです:複数の繰延オブジェクトはjQuery.whenに渡された場合には

、 方法は、新たな「マスター」からの約束を返します が通過したすべてのDeferredsの集約状態を追跡する遅延オブジェクト 方法は、そのマスターは、すべての Deferredの決意次第、繰延解決、または次第 Deferredの作り方の一つが拒否されたとして繰延マスターを拒否します。繰延マスターが解決した場合、それは が jQuery.whenに渡されたすべてのDeferredの解決された値が渡されます。 DeferredのはjQuery.ajax() 要求されたときに、例えば、引数は、それらが引数リストで指定された ためには、要求のためのjqXHRオブジェクトになります。 Deferredの一方が拒否された複数のDeferred場合

、 jQuery.whenは直ちにそのマスターためfailCallbacksを発射 据え置き。 Deferredsのいくつかは、その時点でまだ で解決されていない可能性があることに注意してください。あなたは、このような任意の未完成のAJAXリクエストをキャンセルするように、この 場合の追加処理を実行する必要がある場合は、検査/ failCallbackでそれらをキャンセル 閉鎖に基礎となるjqXHRオブジェクトへの参照 を保つことができます。

出典:http://api.jquery.com/jquery.when/

のでdeferredオブジェクトがエラーに続いmaster deferred火災failCallbacksを解決し、それはおそらく未解決deferred秒で何をすべきかを決定するのはあなた次第です場合。

関連する問題