Я хотел бы предложить другой подход для такого модуля зависимости, как упомянуто в комментариях выше.Проблема в том, что define
не принимает параметр async
.Использование простого require
внутри функции define
вводит условие гонки, поскольку код требуемых модулей еще не выполнен.
Пример ( WRONG ):
oldCode.js
window.foo = function(){};
legacyWrapper.js
define(["require"],function(require){
require({async:0},["./oldCode"]);
})
code.js
define(["./legacyWrapper"],function(){
window.foo(); //throws exception, foo has not been loaded yet.
})
( jsFiddle demo )
Однако есть решение этой проблемы. Вам необходимо вернуть Отложено это решается, как только все модули загружены.В следующем примере загружаются a, b, c, d по порядку.
define(["require","dojo/Deferred"],function(require,Deferred){
var def = new Deferred();
require({async:0},
["./moduleA",
"./moduleB",
"./moduleC",
"./moduleD"],
function(){
def.resolve();
});
return def;
})
Для доступа к свойствам, определенным в модуле A, теперь вы можете использовать
require(["legacyDeps"],function(legacyDeps){
legacyDeps.then(function(){
//It's save to assume that all legacy modules have been loaded here.
});
});