Sono nuovo di Node e JavaScript (beh, programmazione asincrona in generale) e ho notato quando stavo lavorando su un progetto che il codice seguente è un modello circolare e che queste sono pratiche sbagliate per l'ovvia ragione per cui il modulo potrebbe non essere ancora caricato (e il codice di esempio causa errori).
Ecco il mio codice:
Modulo principale
var module2 = require('./module2');
var data = 'data';
module2.fetchStuff(data);
Module2
var module3 = require('./module3');
var cleanDataArray = [];
function fetchStuff(data){
// Fetches stuff based on data
module3.cleanStuff(data);
}
function takeStuffBack(data){
cleanData.push(data);
}
module.exports = {
fetchStuff: fetchStuff,
takeStuffBack: takeStuffBack,
cleanData: cleanDataArray
};
Module3
var module2 = require('./module2');
function cleanStuff(data){
// Clean data from needless stuff
module2.takeStuffBack(data); // I get a TypeError here because 'module2' is yet to fully load.
}
module.exports = {
cleanStuff: cleanStuff
};
Il XY
Ciò che questa struttura dovrebbe fare è che start module
richiami una funzione di recupero in module2
, la funzione di recupero deve "lavare" i dati nel terzo modulo prima di riprenderli e fornirli per qualsiasi cosa desideri esportarlo. Quindi suppongo che XY sia che devo fare è ottenere dati da un'API di terze parti e quindi "pulire" i dati dalle cose che contiene ma non voglio, e quindi ho bisogno di fare quella versione "pulita" disponibile per il resto dell'applicazione.
Quali altri modi ci sono per farlo in un modo migliore, senza uno schema circolare come questo che è rotto perché module2
non verrà caricato prima che module3
provi a chiamarlo?