Ausführungsfunktionen in Reihe
-
14-10-2019 - |
Frage
Zunächst einmal ... ein frohes neues Jahr!
Könnten Sie mir bitte erklären, wie funktioniert das? Ich stöberte durch Verbinden's (https://github.com/senchalabs/connect) Quellcode, aber ich verstehe ihn nicht.
Ich würde es gerne selbst schreiben.
app.get(
'/',
function(req, res, next) {
// Set variable
req.var = 'Happy new year!';
// Go to next function
next();
},
function(req, res, next) {
// Returns 'Happy new year!'
console.log(req.var); // <- HOW IS THIS POSSIBLE?
// (...)
}
);
Danke im Voraus!
Lösung
Es sieht so aus, als ob das erste Funktionsargument, das Sie bereitstellen get()
zuerst funktionieren.
Wenn es aufgerufen wird, werden dem Anruf 3 Parameter zur Verfügung gestellt. Innerhalb des Anrufs, die req
Der Parameter muss ein Objekt sein, dem Sie Eigenschaften zuweisen können. Sie haben die zugewiesen var
Eigentum und ihm einen Wert von gegeben 'Happy new year!'
.
Das nächste Funktionsargument, das Sie übergeben, wird über einen Aufruf an die aufgerufen next()
Parameter und 3 Parameter werden dem Anruf erneut bereitgestellt. Der erste Parameter ist anscheinend das gleiche Objekt, das dem ersten Anruf gegeben wurde, bei dem Sie das zugewiesen haben var
Eigentum.
Da es (anscheinend) dasselbe Objekt ist, ist die von Ihnen zugewiesene Eigenschaft noch vorhanden.
Hier ist ein einfaches Beispiel: http://jsfiddle.net/dwfrv/1/ (Öffnen Sie Ihre Konsole)
// The main get() function. It has two function parameters.
function get(fn1, fn2) {
// create an empty object that is passed as argument to both functions.
var obj = {};
// create a function that is passed to the first function,
// which calls the second, passing it the "obj".
var nxt = function() {
fn2(obj); //When the first function calls this function, it fires the second.
};
// Call the first function, passing the "obj" and "nxt" as arguments.
fn1(obj, nxt);
}
// Call get(), giving it two functions as parameters
get(
function(req, next) {
// the first function sets the req argument (which was the "obj" that was passed).
req.msg = 'Happy new year';
// the second function calls the next argument (which was the "nxt" function passed).
next();
},
function(req) {
// The second function was called by the first via "nxt",
// and was given the same object as the first function as the first parameter,
// so it still has the "msg" that you set on it.
console.log(req.msg);
}
);
Beachten Sie, dass dies ein sehr vereinfachtes Beispiel mit weniger Parametern in den Funktionen ist. Nicht auch, dass ich mich verändert habe var
zu msg
seit var
ist ein reserviertes Wort.
Andere Tipps
Wenn Sie möchten, verwenden Sie das asynchrische Modul. Es erleichtert viel einfacher, in Serie, Parallelen oder einem Pool laufen zu können.