C'è un modo per rendere require
chiamata sincronizzazione. Rendono CommonJS stile:
var module = require('modulepath')
Quindi, se volete NON bisogno di una fabbrica in funciton le chiamate nidificate richiedono, si potrebbe "sync" il bisogno di chiamate in questo modo ... Ma dal momento che non si è fuori di fortuna.
AMD style requre(depsArray, factoryFn)
è esattamente come inserire il codice in un thread parallelo. Non c'è modo di renderlo "sincronizzato" ma puoi usare "semafori" per coordinare il risultato.
La risposta alla tua domanda dipende molto anche da ciò che consuma A nidificato e B annidato. Se essi dipendono da qualche prodotto da cima necessaria in questo modo è assolutamente necessario utilizzare "semafori filettati" e non si può semplicemente spingere le chiamate nidificate richiedere in nome di definire le chiamate:
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()
});
});
};
In altre parole, basta pensare a richiedere (dependsArray, factoryFn) come "discussioni" e applica la tua comprensione dell'utilizzo di thread ad esso.
Non dovresti usare le dipendenze? – epascarello
Sì. Tuttavia stiamo cercando di separare le nostre cose in file separati. Ad esempio il codice sopra è in FileA.js. FileB.js chiama someFunction() con il suo callback. Tuttavia, la richiamata ha una dipendenza da alcune impostazioni che si verificano nei richiami require() di FileA.js. Il problema è che la natura asincrona di require significa che il callback è eseguito prima che siano impostate le dipendenze in require(). – user657352