Page 82 - jQuery для начинающих
P. 82
80% Объект Deferred и побратимы
Работа с Deferred это уже высший пилотаж, это «mad skills» заставлять асинхронный
JavaScript работать синхронно. Давайте посмотрим как он работает (данный код можно
скопировать в консоль и выполнить на любой странице, где подключен jQuery):
// инициализация Deferred объекта
// статус «ожидает выполнение»
var D = $.Deferred();
// подключаем обработчики
D.done(function() { console.log("first") });
D.done(function() { console.log("second") });
// изменяем статус на «выполнен успешно»
// для этого вызываем resolve()
// наши обработчики будут вызваны в порядке очереди,
// но они не ждут друг-друга
D.resolve();
// данный обработчик подключён слишком поздно, и будет вызван сразу
D.done(function() { console.log("third") });
Кроме сценариев с «happy end», есть ещё и грустные истории, когда всё пошло не так как
нам бы хотелось:
// инициализация Deferred объекта
var D = $.Deferred();
// подключаем обработчики
D.done(function() { console.log("done") });
D.fail(function() { console.log("fail") });
// изменяем статус на «выполнен с ошибкой»
D.reject();
// в консоли нас будет ожидать лишь «fail» :(
Для ускорения написания кода существует ещё метод then(), который позволяет вешать
одновременно обработчики всех типов:
D.then(function() { console.log("done") },
function() { console.log("fail") });
82
www.trk.kg