2012-01-10 4 views
2

私は多少(もちろんあまりとんでもない、)このようなコードを持っている:のjQueryのDeferred、.pipe例外

var d = $.Deferred(); 
d.pipe(function() { 
    throw "a"; 
}).then(function() { 
    console.log("good!"); 
}, function(e) { 
    console.log("I want the exception here"); 
}); 
d.resolve(); 

問題が.pipedoneFilterに例外をスローすると、jQueryのを作るようには見えないということですこれを失敗とみなし、doneFilterにキャッチされていない例外が発生します。

代わりに新しい遅延を作成し、doneFilterの周りにtry-catchブロックをスローすることができますが、それについてもっと良い方法があるかどうかは疑問でした。

+0

あなたの例で '.pipe()'や 'doneFilter'を使用していないので、私は混乱します。' \ - : 'について話を進めてください。 – hippietrail

答えて

3

throwを使用する必要がある場合は、間違いでdoneFilterreturn $.Deferred().reject('a')(または何でも)をキャッチすることをお勧めします。渡した引数でthenの失敗コールバックが呼び出されます。

+0

これについて詳しく教えてください。明らかに、 '$。Deferred.reject'のようなものはありません。 – rfw

+0

申し訳ありませんが、タイプミス。修正するために編集されました: '$ .Deferred()' – glortho

+1

なぜこのデフォルトの動作ではありませんか:-(https://github.com/kriskowal/qはデフォルトであります) – w00t