非同期js呼び出し:calback、listeners、control flow libsとpromises


jsには多くの方法があります.非同期コールを実現することができます.彼らと長所と短所を検討します.
スクリプト
recordsは、1つの配列オブジェクトを用いて、非同期的に呼び出した方式でrecordsを処理し、処理後の結果を返す.
コールバック関数
コールバック関数は最も一般的な非同期で実行されるスキームである.コールバック関数は、
finder([1, 2], function(results) {
  ..do something
});
コールバック関数方式は、関数を後から呼び出すことにより、上記の例は以下のようになる.
Panel.show = function(name){
	
	//do Something;

	Panel.onshow[name]();
}
セットアップ
findとprocessをより良いシミュレーションできるように、timersシミュレーションAJAX方式で処理します.
function finder(records, cb) {
    setTimeout(function () {
        records.push(3, 4);
        cb(records);
    }, 1000);
}
function processor(records, cb) {
    setTimeout(function () {
        records.push(5, 6);
        cb(records);
    }, 1000);
}
コールバック関数方式
コードは次のようになります.
finder([1, 2], function (records) {
    processor(records, function(records) {
      console.log(records);
    });
});
は、匿名関数をfinder関数に出入りさせ、匿名関数を実行するときにプロcessor関数を呼び出します.
下記のコードを使ってもいいです.
function onProcessorDone(records){
  console.log(records);
}

function onFinderDone(records) {
    processor(records, onProcessorDone);
}

finder([1, 2], onFinderDone);
log[1,2,3,4,5,6]コールバック関数は主にパラメータ関数を呼び出すことで実現されます.
イベントハンドラ関数(続き)
イベントハンドリング関数は、非常に一般的な非同期呼び出しであり、イベントハンドリング関数は、
finder.on('done', function (event, records) {
  ..do something
});
セットアップ
イベント処理関数の例を示しますが、ここではcalbackの例を参考にします.
var finder = {
    run: function (records) {
        var self = this;
        setTimeout(function () {
            records.push(3, 4);
           self.trigger('done', [records]);
        }, 1000);
    }
}
var processor = {
    run: function (records) {
        var self = this;
        setTimeout(function () {
            records.push(5, 6);
            self.trigger('done', [records]);
        }, 1000);
    }
 }
以降、on、triggerなどのイベントオブジェクトを作成します.
var eventable = {
    on: function(event, cb) {
        $(this).on(event, cb);
    },
    trigger: function (event, args) {
        $(this).trigger(event, args);
    }
}
はその後、exted方法を利用して、eventableの方法を上記のオブジェクトにコピーする.
 $.extend(finder, eventable);
 $.extend(processor, eventable);
このようにfinderとprocessorでイベントの発生を監督することができます.
listenerを利用する
finder.on('done', function (event, records) {
  processor.run(records);
});
processor.on('done', function (event, records) {
    console.log(records);
});
finder.run([1,2]);
最後の出力
[1,2,3,4,5,6]
原文の住所 http://sporto.github.io/blog/2012/12/09/callbacks-listeners-promises/