Обратные вызовы jQuery, по-видимому, повторяются при сбое? - PullRequest
11 голосов
/ 25 августа 2011

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

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

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

log добавляет все, что ему передано, в div ... но dieInAFire не существует.Однако вместо того, чтобы просто останавливать выполнение, анонимная функция вызывается снова и снова, о чем свидетельствует растущее число появлений «исчезновения ...» в журнале div.

Это ожидаемое поведение?Если так, то почему?

Ответы [ 2 ]

4 голосов
/ 25 августа 2011

Это известная ошибка. См. Отчет здесь.

1 голос
/ 25 августа 2011

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

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

options.complete.call(elem);

Кому:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...