Jest na to sposób, aby require
rozmowę synchronizację. Zrób to CommonJS styl:
var module = require('modulepath')
Tak więc, jeśli chcesz NIE potrzebują funciton fabryka w swoim zagnieżdżonych wymagają połączeń, można „sync” require połączeń tamtędy ... Ale skoro ty jesteś out szczęścia.
Styl AMD requre(depsArray, factoryFn)
jest dokładnie taki, jak popychanie kodu do równoległego wątku. Nie ma sposobu, aby uczynić go "synchronizowanym", ale możesz użyć "semaforów" do skoordynowania wyniku.
Odpowiedź na twoje pytanie zależy również w dużym stopniu od tego, co zagnieżdżone A i zagnieżdżonego B. Jeśli zależą one od jakiegoś produktu od góry wymaga jak więc absolutnie musi używać „semaforów gwintowanych” i nie można po prostu wcisnąć zagnieżdżone wymagają połączenia w nazwie określenie połączeń:
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()
});
});
};
Innymi słowy, tylko myśleć o require (dependsArray, factoryFn) jako "wątki" i stosuj swoje zrozumienie korzystania z wątków.
Nie powinieneś używać zależności? – epascarello
Tak. Staramy się jednak podzielić nasze rzeczy na osobne pliki. Na przykład powyższy kod znajduje się w FileA.js. FileB.js wywołuje someFunction() z wywołaniem zwrotnym. Jednak to wywołanie zwrotne jest zależne od niektórych ustawień, które występują w wywołaniach require() FileA.js. Problem polega na tym, że asynchroniczna natura wymagania oznacza, że wywołanie zwrotne jest wykonywane przed ustawieniem zależności w wymaganiu(). – user657352