非同期呼び出しの処理で問題が発生しました。
たとえば、requirejsを使用していくつかのモジュールを動的にロードしたいとします。現在、私はサブスクライバーパブリッシャーパターンを使用しています。残念ながら、これはある状況で私のコードを本当に混乱させます...:
オブジェクトに作業イベントシステムがあると想像してください
var loader = {
load: function(modules) {
// do a async requirejs call
require(modules, function(){
// map arguments to normal array
var modules = [].slice().call(arguments);
// fire loaded event, pass modules
this.trigger('loaded', modules);
}.bind(this));
}
};
var parent = {
// do some initialization work
initialize: function() {
// execute the second initialization when our modules have finished loading async
loader.on('loaded', this.secondInitialize, this);
// require the given modules in the array
loader.load(['one', 'two', 'three']);
},
secondInitialize: function(modules) {
var three = new modules[2]();
// do something with the 'three' module
}
};
ご覧のとおり、これは本当に紛らわしいです。
非同期呼び出しの適切な処理を可能にする他のデザインパターンはありますか?