jQuery 1.5 mang đến cho các đối tượng thu nhập hoãn lại mới và các phương pháp kèm theo .when
, .Deferred
và ._Deferred
.
Đối với những người chưa sử dụng .Deferred
trước đây, tôi đã chú thích nguồn cho nó .
Các ứng dụng có thể có của các phương pháp mới này là gì, làm thế nào để chúng ta sắp xếp chúng vào các mẫu?
Tôi đã đọc API và nguồn , vì vậy tôi biết nó làm gì. Câu hỏi của tôi là làm thế nào chúng ta có thể sử dụng các tính năng mới này trong mã hàng ngày?
Tôi có một ví dụ đơn giản về một lớp đệm gọi yêu cầu AJAX theo thứ tự. (Tiếp theo bắt đầu sau khi kết thúc trước đó).
/* 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();
};
};
Tôi đang tìm kiếm các cuộc biểu tình và có thể sử dụng .Deferred
và .when
.
Nó cũng sẽ là đáng yêu để xem các ví dụ về ._Deferred
.
Liên kết với jQuery.ajax
nguồn mới cho các ví dụ là gian lận.
Tôi đặc biệt quan tâm đến những kỹ thuật có sẵn khi chúng ta trừu tượng hóa liệu một hoạt động được thực hiện đồng bộ hay không đồng bộ.
._Deferred
chỉ đơn giản là "đối tượng hoãn lại" thực sự .Deferred
sử dụng. Đó là một đối tượng nội bộ mà rất có thể bạn sẽ không bao giờ cần.