我有問題來處理異步調用。將異步調用轉換爲同步?
例如,我想用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
@usr可能不是一個全面的,但一個替代? – bodokaiser