jQuery 1,5 przynosi nowe odroczony przedmiot i dołączone metody .when
, .Deferred
i ._Deferred
.
Dla tych, którzy nie używali .Deferred
wcześniej, mam uwagami na źródło dla niego .
Jakie są możliwe zastosowania tych nowych metod, w jaki sposób zajmiemy się dopasowaniem ich do wzorców?
Przeczytałem już interfejs API i źródło , więc wiem, co robi. Moje pytanie brzmi: w jaki sposób możemy korzystać z tych nowych funkcji w codziennym kodzie?
Mam prosty przykład klasy bufora, która po kolei wywołuje żądanie AJAX. (Następny zaczyna się po zakończeniu poprzedniego).
/* 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();
};
};
Szukam demonstracji i możliwych zastosowań .Deferred
i .when
.
Byłoby również miło zobaczyć przykłady ._Deferred
.
Powiązanie z nowym jQuery.ajax
źródłem przykładów to oszustwo.
Szczególnie interesuje mnie, jakie techniki są dostępne, gdy wyodrębniamy, czy operacja jest wykonywana synchronicznie, czy asynchronicznie.
._Deferred
jest po prostu prawdziwym „Odroczonym obiektem”, który .Deferred
wykorzystuje. To wewnętrzny obiekt, którego najprawdopodobniej nigdy nie będziesz potrzebować.