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
。
看到的例子也很可爱._Deferred
。
链接到新jQuery.ajax
的示例源是作弊。
当我们抽象出一个操作是同步还是异步完成时,我对什么技术可用特别感兴趣。
._Deferred
只是使用的真正的“延迟对象” .Deferred
。这是一个内部对象,您很可能永远不需要。