我在处理异步调用时遇到了问题。
例如,我想用 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
}
};
如您所见,这确实令人困惑。
是否有任何其他设计模式可以很好地处理异步调用?