シナリオが実際にイベントのようなものなのか、それとも非同期操作のようなものなのかによって異なります。
イベントベース
マイクロイベントのようなものを使用すると、次のことができます。このパターンは非常に一般的で単純なので、理解の観点からは素晴らしいので、ある時点でこれを自分で実装することをお勧めします。
MicroEvent.mixin(A);
A.Foo = function () {
//Do stuff A needs to do, then:
A.trigger('foo-complete');
};
//Somewhere nice and separate and decoupled
A.bind('foo-complete', B.Bar);
イベントのフィルタリング、イベントのマッピングなど、より複雑なことを行う必要がある場合。ReactiveExtensions(C#ライブラリに基づく)は非常に強力ですが、機能が必要ない場合は、ロードするための大きなライブラリです。
非同期操作
コールバックの使用
これは、コールバックを使用して実行できます。これは、かなり単純な操作に最適です。
A.Foo = function (cb) {
//Do stuff A needs to do, then:
if (cb) cb();
};
A.Foo(B.Bar);
約束の使用
これらは最初はより複雑に見えますが、簡単に構成でき、エラーを処理するための優れた方法が組み込まれています。
最も人気のあるpromiseライブラリの1つであるQを使用します(ここでも、これらがたくさんあります)。
A.Foo = function () {
var def = Q.defer();
setTimeout(function () {
//Simulate async operation
def.resolve();
}, 1000);
return def.promise;
};
A.Foo().then(B.Bar).end();
制御フローライブラリの使用
制御フローライブラリ(おそらくpromiseはこれの特殊なケースです)は、コールバックシステムに基づく操作の作成を支援することを目的としています。