window.onload = function(){
var o = {};
Deferred.define(o);
o.func = function(){alert(1); return this;}
var print = function(a){
alert(a)
}
Deferred.parallel([ // 配列かハッシュのどちらかで渡す
/* 使い方 1 : Deferred.next を定義したオレオレオブジェクトを渡す */
o.func()
/* 使い方 2 : Deferred チェーンを渡す */
,Deferred.next( function(){ alert(2) } )
,Deferred.wait(1).next( function(){ alert(3) } )
,Deferred.call(print, 4)
/* 使い方 3 : 新しい Deferred インスタンスを作ってそれを渡す */
,(function(){
var d = new Deferred();
setTimeout(function(){
alert(5);
d.call(); // ← ここで call することで遅延チェーンが繋がる
},2000);
return d;
})()
])
.next(function(){ // もちろん Deferred チェーンを繋げることができる。
alert(6);
});
}
Deferred.parallel = function (dl) {
if (arguments.length > 1) dl = Array.prototype.slice.call(arguments);
var ret = new Deferred(), values = {}, num = 0;
for (var i in dl) if (dl.hasOwnProperty(i)) (function (d, i) {
if (typeof d == "function")d = next(d);
d.next(function (v) {
values[i] = v;
if (--num