非同期js呼び出し:calback、listeners、control flow libsとpromises
2640 ワード
jsには多くの方法があります.非同期コールを実現することができます.彼らと長所と短所を検討します.
スクリプト
recordsは、1つの配列オブジェクトを用いて、非同期的に呼び出した方式でrecordsを処理し、処理後の結果を返す.
コールバック関数
コールバック関数は最も一般的な非同期で実行されるスキームである.コールバック関数は、
findとprocessをより良いシミュレーションできるように、timersシミュレーションAJAX方式で処理します.
コードは次のようになります.
下記のコードを使ってもいいです.
イベントハンドラ関数(続き)
イベントハンドリング関数は、非常に一般的な非同期呼び出しであり、イベントハンドリング関数は、
イベント処理関数の例を示しますが、ここではcalbackの例を参考にします.
listenerを利用する
[1,2,3,4,5,6]
原文の住所 http://sporto.github.io/blog/2012/12/09/callbacks-listeners-promises/
スクリプト
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/