Подтвердить что ты не робот

Обратные вызовы jQuery, по-видимому, повторяются при ошибке?

Кажется, я наблюдаю хотя бы один случай, когда функция обратного вызова, переданная функции эффекта jQuery, будет выполняться несколько раз, если есть ошибка при ее выполнении.

Например, см. этот JS Fiddle, содержащий следующий код:

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

log добавляет все переданное ему в div... но dieInAFire не существует. Скорее просто прекращение выполнения, однако, анонимная функция, как представляется, получает вызов снова и снова, о чем свидетельствует растущее число явлений "fading out..." в лог-div.

Является ли это ожидаемым поведением? Если да, то почему?

4b9b3361

Ответ 2

Я только что отправил комментарий об ошибке, опубликованной patrick dw.

Изменение строки:

options.complete.call(elem);

To:

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

Заставляет callback выполнять асинхронно, и если он больше не будет останавливать выполнение, если он вызывает какие-либо ошибки. IMO это лучше, чем использование try catch, поскольку оно не подавляет исключение.

Если вы хотите отредактировать свою мини-версию и используете последний jQuery, вы можете выполнить поиск e.complete.call(d) и заменить его на setTimeout(function(){e.complete.call(d)},0)