Pot.Deferred.deferrize

{Function} Pot.Deferred.deferrize ({Object|Function} object [, {String|Function} method])

Pot.js と PotLite.js で利用可能。

関数を Deferred 化します。

関数 method の返り値を Pot.Deferred インスタンスにし、Deferred 化した関数を返します。
引数 object は、対象の関数の親オブジェクトを指定します。
引数 method は、関数名を文字列で指定 もしくは関数オブジェクトを渡します。
引数 object が関数オブジェクトで、 method が省略された場合は object が対象の関数になります。

コールバック関数を使用するようなものに対して より効果的で、
非同期であればさらに適しています。
同期で実行される関数に対しても適応できます。
Deferred 化した関数オブジェクトが返ります。
返り値の関数の仕様方法、引数などは Deferred 化する前と同じです。
違いは、Pot.Deferred オブジェクトのインスタンスが返る点です。
Pot.globalize() が適応済みの場合、Pot.Deferred.deferrize() が deferrize() で実行できます。

Deferred 化した関数が返ります。

// setTimeout を Deferred 化
var timer = Pot.Deferred.deferrize(window, 'setTimeout');

timer(function() {
    Pot.debug('in timer (2000 ms.)');
}, 2000).then(function() {
    Pot.debug('End timer');
});

同期で実行される関数を Deferred 化:

var byId = Pot.Deferred.deferrize(document, 'getElementById');

byId('container').then(function(element) {
    Pot.debug('End byId()');
    Pot.debug('tagName = ' + element.tagName); // e.g. 'DIV'
});

関数を第一引数に直接与えることができます。
その場合、第二引数は必要ありません。

// 文字列を charCode からなる配列に変換する関数
var toCharCode = Pot.Deferred.deferrize(function(string) {
    var chars = [], i, len = string.length;
    for (i = 0; i < len; i++) {
        chars.push(string.charCodeAt(i));
    }
    return chars;
});

var string = 'abcdef';
Pot.Deferred.begin(function() {
    return toCharCode(string).then(function(result) {
        Pot.debug(result); // [97, 98, 99, 100, 101, 102]
    });
});