我的代码看起来有点像这样(当然不那么荒谬):
var d = $.Deferred();
d.pipe(function() {
throw "a";
}).then(function() {
console.log("good!");
}, function(e) {
console.log("I want the exception here");
});
d.resolve();
问题是在.pipe
doneFilter
中抛出异常似乎并没有让jQuery认为它是失败的,它导致doneFilter
中的未捕获异常。
另一种方法是创建一个新的延迟并在doneFilter
周围抛出一个try-catch块,但我想知道是否有更好的方法来解决它。
答案 0 :(得分:2)
如果您必须使用throw
,最好在错误时从doneFilter
和return $.Deferred().reject('a')
(或其他)中捕获它。然后将使用您传递的arg调用then
中的失败回调。