【发布时间】:2011-06-19 16:03:34
【问题描述】:
jQuery 1.5 带来了新的 Deferred 对象和附加方法 .when、.Deferred 和 ._Deferred。
对于之前没有使用过.Deferred的人,我已经注释了source for it。
这些新方法有哪些可能的用途,我们如何将它们融入模式?
我已经阅读了API 和source,所以我知道它的作用。我的问题是我们如何在日常代码中使用这些新功能?
我有一个简单的example 缓冲区类,它按顺序调用 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 源示例是作弊。
当我们抽象出一个操作是同步完成还是异步完成时,我对哪些技术可用特别感兴趣。
【问题讨论】:
-
来自常见问题解答:避免提出主观问题...每个答案都同样有效:“您最喜欢什么______?” (他们的重点)
-
@T.J.Crowser 我会考虑改写它。
-
这是一个很好的问题,但不可能有 很多人可以回答 :-)
-
@Pointy 我主要看那些在它是 3rd 方插件时使用它的人。并鼓励人们坐下来使用它!
-
._Deferred只是.Deferred使用的真正“延迟对象”。这是一个您很可能永远不需要的内部对象。
标签: javascript jquery jquery-deferred