2017-12-31 172 views
0

Kurzen Lagebericht:Node.js „require“ - Vermeidung doppelte Lauf

Ich habe 2 Skripte, die eine Menge von API tun, um den Austausch nennt. Einige Anrufe (hauptsächlich Kontostandsüberprüfungen) sind in beiden Skripten identisch.

Um die API-Aufrufe zu begrenzen, habe ich alle diese doppelten Aufrufe in einem dritten Skript, das diese Daten in eine Datei legt.

Skript 1 und 2 beide aus dieser Datei gelesen, und alles funktioniert gut.

jedoch weiter zu den Overhead von Filewrite zu reduzieren und alle 3 Sekunden gelesen, experimentierte ich mit „require“

Script 1 jetzt erfordert Skript 3 und der Rest-Array wird entlang dieser Weise übergeben.

Was ich nicht erwartet habe, ist, dass ich Skript 3 nicht mehr separat ausführen muss. Nach Skript ab dem 1. Script 3 läuft anscheinend im Hintergrund (und übergibt console.log Nachrichten zusammen zu Skript 1)

Und jetzt auf die Frage zu bekommen: Wenn ich das gleiche erfordern in Skript 2 setzen, wird Script 3 läuft effektiv zweimal? Das wäre der ganze Zweck des dritten Skript besiegen ...

Um klar zu sein: Script 3 ist nur eine Funktion, in Intervall ausgeführt wird, ohne Eingabe an allen von Skript 1 und 2 Die Balance Array ist nur exportieren.

+0

ja es wird zweimal ausgeführt werden. Gibt es irgendeinen Grund, warum Sie nicht alles an einem Skript ausführen, wenn sie zusammenhängen? – SunriseM

+0

Beide Skripte kommunizieren mit 3 Vermittlungsstellen. Nur 1 Austausch ist gegenseitig. – Wannes

+0

Beide Skripte sind über 700 Zeilen, die Verschmelzung wäre verrückt :-) – Wannes

Antwort

0

Das erste Mal, Sie require eine Datei, wird es synchron ausgewertet - wenn es erfolgreich abgeschlossen (nicht werfen), wird module.exports Wert zwischengespeichert.

Weitere Male Sie require diese Datei, erhalten Sie die zwischengespeicherten Exporte Wert.

Es klingt wie, was Sie hier wollen, ist jede Datei module.exports = function something() { /* put your actual code here */ } haben - dann können Sie diese Funktion erfordern, und rufen Sie nur auf, wenn Sie müssen (und mehrmals, wenn Sie müssen).

+0

Nein, eigentlich gibt es keine module.exports oder Funktionen, die innerhalb der anderen Skripte aufgerufen werden können. Skript 3 wurde als eigenständiges Polling-Skript geschrieben. Es ruft grundsätzlich alle 3 Sekunden die gleichen API-Aufrufe auf. In jeder Schleife sammelt es ein Array von Zahlen aus einem API-Aufruf und exportiert diese 3 Arrays über exports.name1 = Array1. – Wannes

+0

Ich schlage vor, dass Sie die Standalone-Skripts stattdessen in eigenständige Funktionen konvertieren - das gibt Ihnen mehr Kontrolle darüber, wann der Code ausgeführt werden soll. – LJHarb

Verwandte Themen