У меня есть метод, который выполняет вызов 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.