Метод отложенного выполнения jQuery не запускается при отладке

У меня есть метод, который выполняет вызов jquery ajax. Этот метод возвращает отложенный объект, созданный jquery, когда вы используете $.ajax:

function callWebservice() {
    return $.ajax({
        type: "POST",
        url: "/echo/json/",
        data: {delay: 2}
    });
}

Сразу после вызова этого метода у меня есть несколько обработчиков «сделано» в разных местах кода (которые имеют доступ к Deferred, возвращаемому этим методом):

$(function () {
    var dfr = callWebservice();
    dfr.done(function() { console.log('done 1');})
    dfr.done(function() { console.log('done 2');})
    dfr.done(function() { console.log('done 3');})
    dfr.done(function() { console.log('deferred state 2: ' + dfr.state());})
    console.log('deferred state 1: ' + dfr.state());
});

Когда я просто запускаю этот код, кажется, что все в порядке: я вижу 5 строк в консоли, последняя из которых: «отложенное состояние 2: разрешено».
Однако когда я ставлю точку останова, скажем, 2-й done и дождитесь возврата вызова веб-службы, тогда ни один из этих 4 done обработчиков не будет вызван. В консоли "отложенное состояние 1: ожидание".

Это ожидаемое поведение? Этот отложенный объект не может изменить свое состояние на «разрешено» из-за отладки? Или я не правильно его использую?

Я создал скрипту, чтобы вы могли легко имитировать это поведение.

[ОБНОВЛЕНИЕ]
Кажется, это действительно работает в Chrome. Также при отладке в IE10 все работает как положено. При использовании встроенных инструментов отладки Firefox это также работает. Похоже, это ошибка в Firebug.


person TweeZz    schedule 16.10.2013    source источник
comment
хм ... кажется, это работает для меня, когда я продолжаю прохождение точки останова, она разрешается, и обработчики done вызываются.   -  person Kevin B    schedule 16.10.2013
comment
Вы ждали хотя бы 2 секунды после продолжения? Ответ на вызов веб-службы поступает только через чуть более 2 секунд (поэтому я отправляю задержку: 2 на URL-адрес эха jsfiddle).   -  person TweeZz    schedule 16.10.2013
comment
Да, подождать несколько секунд нормально.   -  person Kevin B    schedule 16.10.2013
comment
Значит, с моим кодом все в порядке, да? :) Я потратил часы, пытаясь понять, что я делаю неправильно... Вероятно, это ошибка/особенность FF/firebug..   -  person TweeZz    schedule 16.10.2013
comment
Да, я подозреваю, что это так, код выглядит нормально.   -  person Kevin B    schedule 16.10.2013
comment
Что мне делать с этим вопросом? Удалите это? Оставить как есть? Написать ответ с описанием результатов?   -  person TweeZz    schedule 16.10.2013
comment
ну, если вы не знаете, почему это происходит, на него действительно нет другого ответа, кроме как я не знаю. вы можете либо оставить его открытым, надеясь, что кто-то другой найдет ответ, либо закрыть его. Лично я бы закрыл его, но я предвзят, я не использую firebug для отладки.   -  person Kevin B    schedule 16.10.2013
comment
давайте продолжим это обсуждение в чате   -  person TweeZz    schedule 17.10.2013


Ответы (1)


Это действительно ошибка в Firebug, а точнее в старый API-интерфейс отладчика Firefox, который он использует, называется JSD. Эта ошибка будет исправлена, как только Firebug переключится на новый API JSD2, который запланирован на следующий основной выпуск.

Себастьян

person Sebastian Zartner    schedule 18.10.2013