Ich habe versucht zu untersuchen, wie genau asynchrone Funktionen geschrieben werden sollen. Nachdem ich viel dokumentiert habe, ist es mir immer noch unklar.
Wie schreibe ich asynchrone Funktionen für Node? Wie soll ich die Fehlerereignisbehandlung korrekt implementieren?
Eine andere Möglichkeit, meine Frage zu stellen, wäre folgende: Wie soll ich die folgende Funktion interpretieren?
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
Außerdem fand ich diese Frage zu SO ("Wie erstelle ich eine nicht blockierende asynchrone Funktion in node.js?") Interessant. Ich habe noch nicht das Gefühl, dass es beantwortet wurde.
javascript
asynchronous
node.js
Kriem
quelle
quelle
setTimeout
und damitsetInterval
herumzuspielen. Oder Ajax-Rückrufe (wahrscheinlich am nächsten an der Knotenerfahrung) oder Ereignis-Listener für Dinge, mit denen Sie vertraut sind, wie Klick- und Ladeereignisse. Das asynchrone Modell ist bereits im Browser vorhanden und im Knoten genau gleich.Antworten:
Sie scheinen asynchrone E / A mit asynchronen Funktionen zu verwechseln. node.js verwendet asynchrone nicht blockierende E / A, da nicht blockierende E / A besser sind. Der beste Weg, es zu verstehen, ist, sich einige Videos von Ryan Dahl anzusehen.
Schreiben Sie einfach normale Funktionen. Der einzige Unterschied besteht darin, dass sie nicht sofort ausgeführt, sondern als Rückrufe weitergegeben werden.
Im Allgemeinen geben APIs einen Rückruf mit einem Fehler als erstem Argument. Beispielsweise
Ist ein allgemeines Muster.
Ein weiteres häufiges Muster ist
on('error')
. BeispielsweiseBearbeiten:
Die obige Funktion beim Aufruf als
Druckt
42
asynchron an die Konsole. Insbesondereprocess.nextTick
wird ausgelöst, nachdem der aktuelle Eventloop-Callstack leer ist. Dieser Aufrufstapel ist nachasync_function
und leerconsole.log(43)
ausgeführt worden. Also drucken wir 43 gefolgt von 42.Sie sollten wahrscheinlich etwas in der Ereignisschleife lesen.
quelle
Es reicht nicht aus, nur an Rückrufen vorbeizukommen. Sie müssen beispielsweise Settimer verwenden, um die Funktion asynchron zu machen.
Beispiele: Nicht asynchrone Funktionen:
Wenn Sie das obige Beispiel ausführen, sollte dies gut sein und warten, bis diese Funktionen funktionieren.
Pseudo-Multithread-Funktionen (asynchron):
Dieser wird völlig asynchron sein. Dies sollte gut sein, wird geschrieben, bevor Async beendet ist.
quelle
Sie sollten dies sehen: Node Tuts Episode 19 - Asynchrone Iterationsmuster
Es sollte Ihre Fragen beantworten.
quelle
Wenn Sie wissen, dass eine Funktion ein Versprechen zurückgibt, empfehle ich die Verwendung der neuen asynchronen / wartenden Funktionen in JavaScript. Dadurch sieht die Syntax synchron aus, funktioniert jedoch asynchron. Wenn Sie das
async
Schlüsselwort zu einer Funktion hinzufügen , können Sieawait
in diesem Bereich Versprechen abgeben:Wenn eine Funktion kein Versprechen zurückgibt, empfehle ich, es in ein neues Versprechen zu verpacken, das Sie definieren, und dann die gewünschten Daten aufzulösen:
Fazit: Nutzen Sie die Kraft der Versprechen.
quelle
Versuchen Sie dies, es funktioniert sowohl für den Knoten als auch für den Browser.
quelle
Ich habe zu viele Stunden für eine solche Aufgabe in node.js verbracht. Ich bin hauptsächlich Front-End-Typ.
Ich finde das ziemlich wichtig, da alle asynchronen Knotenmethoden mit Rückrufen umgehen und es besser ist, sie in Promise umzuwandeln.
Ich möchte nur ein mögliches Ergebnis zeigen, schlanker und lesbarer. Wenn Sie ECMA-6 mit Async verwenden, können Sie es so schreiben.
Das
(undefined || null)
ist für Repl-Szenarien (Read Event Print Loop), bei denen undefined ebenfalls funktioniert.quelle