jQuery Deferreds,.pipe和exception

时间:2012-01-10 06:12:55

标签: javascript jquery exception jquery-deferred

我的代码看起来有点像这样(当然不那么荒谬):

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块,但我想知道是否有更好的方法来解决它。

1 个答案:

答案 0 :(得分:2)

如果您必须使用throw,最好在错误时从doneFilterreturn $.Deferred().reject('a')(或其他)中捕获它。然后将使用您传递的arg调用then中的失败回调。