Pot.Deferred.chain

{Pot.Deferred} Pot.Deferred.chain ({Function|Array|Object|*} args [, {Function|Array|Object|*} args2 [, ...]])

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
// と出力される