2012-01-10 40 views
2

我有一些代碼看起來有點像這樣(少可笑,當然):jQuery的Deferreds,.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 2012-08-08 10:01:57

回答

3

如果您必須使用throw,確實最好在錯誤時將它記錄在doneFilterreturn $.Deferred().reject('a')(或其他)中。 then中的失敗回調將隨您通過的arg調用。

+0

你能詳細說明一下嗎?顯然沒有'$ .Deferred.reject'這樣的東西。 – rfw 2012-01-10 06:49:30

+0

對不起,錯字。編輯修正:'$ .Deferred()' – glortho 2012-01-10 06:52:12

+1

爲什麼不是這種默認行爲:-(https://github.com/kriskowal/q默認情況下是這樣的) – w00t 2013-03-18 15:11:24