Работаем с JQuery Deferred

В JQuery есть такой удобный объект — Deferred, который позволяет выполнять отложенные действия в зависимости от состояния, которое нужно установить в тот момент, когда мы хотим выполнить нужные действия. Так же можно выполнять последующие действия уже после установки состояния данного объекта.

Создаем deferred объект

var defObj = new $.Deferred();

Добавляем отложенные действия.

defObj.done( function(data1, data2, dataN) {
console.log("success");
});
defObj.fail( function(data1, data2, dataN) {
console.log("fail");
});
defObj.always( function(data1, data2, dataN) {
console.log("complete");
});

Ставим нужное состояние deferred объекта

defObj.resolve(data1, data2, dataN); // или defObj.reject(data1, data2, dataN);
// вывод: success complete или fail complete

Затем можно добавить еще действия, допустим действие done

defObj.done( function(data1, data2, dataN) {
console.log("done");
});
// вывод done

Это действие будет выполнено сразу, так как состояние deferred объекта уже было установлено.
Так же иногда нужно просто проверить состояние deferred объекта

defObj.isResolved(); // true или false
defObj.isRejected(); // true или false
defObj.state(); // resolved или rejected или pending

Другой хороший метод создания deferred объекта — это $.when(), который принимает список deferred объектов

var defObj = $.when(defObj1, defObj2, defObjN)
// функция done содержит массивы аргументов для defObj1, defObj2, defObjN соответственно
.done(function(args1, args2, argsN) {
console.log("done");
});

Не сложно догадаться что функция done будет выполнена только тогда, когда объектам defObj1, defObj2, defObjN  установят состояние «resolved».
PS: методы $(document).ready(),  $.ajax() и многие другие методы jquery внутри себя используют deferred объекты.

По теме:
Внедряем js модуль в query plugin

Например написан модуль SelectControl по принципу amd : define("SelectControl", ["jquery"/* TODO uncomment: , "addJqueryPlugin" */], function($) { function SelectControl() { this.init.apply(this, Read more

Soap вызов, используя jquery.ajax

Иногда не хочется делать запрос с клиента на свой сервер, который в свою очередь, используя soap клиент, делает запрос еще на Read more

Реализуем менеджер картинок в редакторе tinymce

На официальном сайте tinymce предлагают подключить файловый менеджер MoxieManager. Но этот менеджер вовсе не бесплатный. Реализуем свой менеджер для картинок. Покажем кнопку Read more

Пишем модули на javascript и загружаем их при помощи requirejs

В ECMAScript 6 есть уже классы. Но думаю их пока рано еще использовать. Опишу способ создания модулей, которым пользуюсь я. Создадим файл Read more

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *