jQuery 1.5は、新しいDeferredオブジェクトと付属のメソッド.when
を提供.Deferred
し._Deferred
ます。
.Deferred
以前に使用したことがない人のために、そのソースに注釈を付けました。
これらの新しいメソッドの可能な使用法は何ですか?それらをパターンにどのように合わせるのですか?
私はすでにAPIとソースを読みましたので、それが何をするか知っています。私の質問は、これらの新機能を日常のコードでどのように使用できるかです。
AJAXリクエストを順番に呼び出すバッファクラスの簡単な例があります。(前の1つが終了した後、次の1つの開始)。
/* 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
です。これは、おそらく必要になることのない内部オブジェクトです。