jQuery 1.5 пропонує новий об'єкт "Відкладений" та додані методи .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
.
Також було б чудово побачити приклади ._Deferred
.
Посилання на нове jQuery.ajax
джерело для прикладів - це обман.
Мене особливо цікавить, які методи доступні, коли ми резюмуємо, чи виконується операція синхронно чи асинхронно.
._Deferred
просто справжній "відкладений об'єкт", який .Deferred
використовується. Це внутрішній об'єкт, який, швидше за все, вам ніколи не знадобиться.