Pot.js と PotLite.js で利用可能。
引数に与えられたチェインと共に新しい Pot.Deferred のインスタンスを作成して返します。
この関数は、
引数に与えられたコールバック関数または、
DeferredList となる配列やオブジェクトを
Deferred インスタンスにコールバックチェインとして追加し、
それを開始して返り値とします。
つまり、new Pot.Deferred
から始まって then() などで追加していく一連の流れを
引数の指定みで行えるコンストラクタ代わりに使えます。
chain は、JSDeferred.chain から由来しています。
Pot.globalize() が適応済みの場合、Pot.Deferred.chain() が chain() で実行できます。
var deferred = Pot.Deferred.chain( function() { return Pot.Deferred.wait(1).then(function() { Pot.debug(1); }); }, function(res) { throw new Error('error'); }, // 関数名に rescue と付けることで rescue メソッド扱いになる function rescue(err) { Pot.debug(err); }, function(res) { return Pot.Deferred.succeed(res).then(function(val) { Pot.debug(2); }); }, { foo : function(res) { Pot.debug(3); }, bar : function(res) { return Pot.Deferred.begin(function() { Pot.debug(4); }); } }, function(res) { Pot.debug(5); }, [ function(res) { return Pot.Deferred.wait(1).then(function() { Pot.debug(6); }); }, function(res) { return Pot.Deferred.begin(function() { return Pot.Deferred.succeed(7).then(function(val) { Pot.debug(val); }); }); } ] ); // 1, (Error: error), 2, 3, 4, 5, 6, 7 // と出力される