Как можно использовать jQuery deferred?

jQuery 1.5 содержит новый объект Deferred и присоединенные методы .when , .Deferred и ._ Deferred .

Для тех, кто раньше не использовал .Deferred , я добавил аннотацию к источнику для него .

Каковы возможные варианты использования этих новых методов, как мы это делаем вписывать их в шаблоны?

Я уже читал API и исходный код , поэтому я знаю, что он делает. Мой вопрос в том, как мы можем использовать эти новые функции в повседневном коде?

У меня есть простой пример класса буфера, который вызывает запрос AJAX по порядку. (Следующий запуск после завершения предыдущего.)

/* Class: Buffer
 *  methods: append
 *
 *  Constructor: takes a function which will be the task handler to be called
 *
 *  .append appends a task to the buffer. Buffer will only call a task when the 
 *  previous task has finished
 */
var Buffer = function(handler) {
    var tasks = [];
    // empty resolved deferred object
    var deferred = $.when();

    // handle the next object
    function handleNextTask() {
        // if the current deferred task has resolved and there are more tasks
        if (deferred.isResolved() && tasks.length > 0) {
            // grab a task
            var task = tasks.shift();
            // set the deferred to be deferred returned from the handler
            deferred = handler(task);
            // if its not a deferred object then set it to be an empty deferred object
            if (!(deferred && deferred.promise)) {
                deferred = $.when();
            }
            // if we have tasks left then handle the next one when the current one 
            // is done.
            if (tasks.length > 0) {
                deferred.done(handleNextTask);
            }
        }
    }

    // appends a task.
    this.append = function(task) {
        // add to the array
        tasks.push(task);
        // handle the next task
        handleNextTask();
    };
};

Я ищу демонстрации и возможные варианты использования .Deferred и .when .

Также было бы прекрасно см. примеры ._ Отложено .

Ссылки на новый источник jQuery.ajax для примеров - это обман.

Меня особенно интересует, какие методы доступны, когда мы абстрагируемся от того, выполняется ли операция синхронно или асинхронно.

278
задан halfer 6 June 2019 в 21:53
поделиться