2017-03-02 3 views
0

Ich hoffe, es geht dir gut.Node js - Gesamtstruktur eines Programms

Ich brauche Ihre Hilfe zu verstehen, wie man ein Programm in Node JS logisch zu organisieren, um die Wiederholung von Code aufgrund seiner asynchronen Eigenschaft zu vermeiden (als Anfänger ..). Nehmen wir ein Beispiel, um es einfacher zu erklären. Man hat einige Daten in einer Mongo-Datenbank (sagen wir mal eine Namensliste). Diese Liste von Namen kann der Zugriff dank der Funktion readdata sein, wie unten

function readData(criteriaRead,callback) { 
    mongodb.stuff(..) 
    callback('data read on mongodb') 
} 

Ich habe zwei Aktionen in meinem Programm: Die eine ist die Liste der Namen zu drucken, die andere zu prüfen ist, ob ein Name in der ist Liste. Für den ersten Fall, es ist einfach, ich muss nur dieses dieses Im zweiten Fall

readData(criteriaRead,printout) 

function printout(data) {console.log(data)} 

und zu tun, eine Funktion wie haben, sagen wir, ich habe eine Funktion wie diese

Jetzt habe ich ein Problem, denn wenn ich tun readData(criteriaRead,checkIfInIt) wird es nicht funktionieren, da checkIfInIt zwei Parameter benötigt. müsste ich eine Funktion wie diese

function readDataBis(criteriaRead,dataToCheck,callback) { 
    mongodb.stuff(..) 
    callback('data read on Mongodb','dataToCheck') 
} 

und dann readDataBis(criteriaRead,dataToCheck,checkIfInIt) funktionieren würde, aber ich habe eine große Wiederholung in meinem Code.

Wie vermeide ich das?

Antwort

0

Es gibt mehrere Lösungen für diese Art von Problem, aber hier ist ein leicht für Ihren Fall

Ihre Funktion als solche

nach innen mit den drei Parametern deklarieren, ob dataToCheckundefined ist, und weiter mit dem Fluss der zweiten Funktion, die Sie hatten, wenn das der Fall ist. (Sonst nur tun, um die Lesefunktion)

sie nennen wie so

readData(callback, criteriaRead); // Third parameter missing, will be undefined 
readData(callback, criteriaRead, dataToCheck); 

Sie auch in einem Objekt für Ihre Parameter wie dies passieren könnte, wenn es es einfacher

function readData(callback, params) { ... 

machen würde und Rufen Sie so

readData(callback, { criteriaRead: criteriaRead, dataToCheck: dataToCheck }); 
+0

Nun, Ihre zweite Lösung ist perfekt für meinen Fall - vor allem, weil ich alle meine Daten über die d behalten kann verschiedene Rückrufe. Das ist wunderbar, vielen Dank –

+0

Ich dachte darüber in der Nacht. Wäre es möglich, das Gleiche mit der Callback-Funktion zu tun? –

+0

Machen Sie dasselbe was? –