有一种方法可以使require
通话同步。使其成为 CommonJS 风格:
var module = require('modulepath')
因此,如果您在嵌套的 require 调用中不需要工厂功能,则可以通过这种方式“同步” require 调用......但是既然这样做了,那么您就不走运了。
AMD 风格requre(depsArray, factoryFn)
就像将您的代码推入并行线程一样。没有办法让它“同步”,但您可以使用“信号量”来协调结果。
您的问题的答案也很大程度上取决于嵌套 A 和嵌套 B 消耗的内容。如果它们依赖于 top 中的某些产品,那么您绝对必须使用“线程信号量”,并且不能将嵌套的 require 调用推送到命名的定义调用中:
function someFunction(callback) {
var resultOfOuterCode = someResultOfCalculations
//top level require
require([...], function(...) {
var resultOfTopRequireCode = someOtherResultOfCalculations
var semaphore = {
'count': 2 // represents the number of thread that need to be "done" before
, 'callback':callback // this callback is fired.
, 'checkIfLast': function(){
this.count -= 1
if (!this.count) {
// count is now 0 - time to run our callback
this.callback()
}
}
}
//nested require A
require([...], function(...) {
// using resultOfTopRequireCode // <-- !!!! this is important part
...
semaphore.checkIfLast()
});
//nested require B
require([...], function(...) {
// using resultOfTopRequireCode // <-- !!!! this is important part
semaphore.checkIfLast()
});
});
};
换句话说,只需将 require(dependsArray, factoryFn) 视为“线程”,并将您对使用线程的理解应用于它。