【发布时间】:2012-09-16 14:15:40
【问题描述】:
我在处理异步调用时遇到了问题。
例如,我想用 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
}
};
如您所见,这确实令人困惑。
还有其他设计模式可以很好地处理异步调用吗?
【问题讨论】:
-
这是 Javascript 中异步工作方式的不幸副作用。没有包罗万象的解决方案。
-
@usr 可能不是万能的,而是另一种选择?
标签: javascript design-patterns asynchronous publish-subscribe