jQuery回调显然在失败时重复?

时间:2011-08-24 23:36:06

标签: javascript jquery animation error-handling callback

我似乎在观察至少一种情况,如果在执行时出现错误,传递给jQuery效果函数的回调函数将重复执行。

例如,请参阅this JS Fiddle,其中包含以下代码:

$('#awesome').fadeOut(400,function () {
    log('fading out...');
    dieInAFire();
});

log将传递给它的任何内容附加到div ...但dieInAFire不存在。然而,相反只是简单地停止执行,匿名函数似乎被反复调用,正如日志div中“淡出...”的出现数量越来越多所证明的那样。

这是预期的行为吗?如果是这样,为什么?

2 个答案:

答案 0 :(得分:4)

这是一个已知的错误。 See the report here.

答案 1 :(得分:1)

我刚刚提交了一篇关于patrick dw发布的错误的评论。

更改行:

options.complete.call(elem);

要:

setTimeout(function(){
    options.complete.call(elem);
}, 0);

使回调以异步方式执行,如果它抛出任何错误,它将不再停止执行。 IMO它比使用try catch更好,因为它不会抑制异常。

如果您要编辑缩小版本,并使用最新的jQuery,则可以搜索e.complete.call(d)并将其替换为setTimeout(function(){e.complete.call(d)},0)