Kann mir jemand ein einfaches Beispiel für die Rückrufe von NodeJs geben? Ich habe bereits auf vielen Websites danach gesucht, kann es aber nicht richtig verstehen. Bitte geben Sie mir ein einfaches Beispiel.
getDbFiles(store, function(files){
getCdnFiles(store, function(files){
})
})
Ich möchte so etwas tun ...
javascript
node.js
asynchronous
callback
asynccallback
Bhushan Goel
quelle
quelle
Antworten:
Öffnen Sie nun die Knoten- oder Browserkonsole und fügen Sie die obigen Definitionen ein.
Verwenden Sie es schließlich mit dieser nächsten Zeile:
In Bezug auf die Fehlerkonventionen im Knotenstil
Costa fragte, wie dies aussehen würde, wenn wir die Rückrufkonventionen für Knotenfehler einhalten würden.
In dieser Konvention sollte der Rückruf mindestens ein Argument, das erste Argument, als Fehler erhalten. Optional haben wir je nach Kontext ein oder mehrere zusätzliche Argumente. In diesem Fall ist der Kontext unser obiges Beispiel.
Hier schreibe ich unser Beispiel in dieser Konvention um.
Wenn wir einen Fehlerfall simulieren möchten, können wir dies mit ItNow wie folgt definieren
Die endgültige Verwendung ist genau die gleiche wie oben:
Der einzige Unterschied im Verhalten
usingItNow
hängt davon ab, welche Version von Ihnen definiert wurde: diejenige, die dem Rückruf für das erste Argument einen "wahrheitsgemäßen Wert" (ein Fehlerobjekt) zuführt, oder diejenige, die ihn für das Fehlerargument mit null füttert .quelle
Eine Rückruffunktion ist einfach eine Funktion, die Sie an eine andere Funktion übergeben, damit diese Funktion sie zu einem späteren Zeitpunkt aufrufen kann. Dies tritt häufig bei asynchronen APIs auf . Der API-Aufruf wird sofort zurückgegeben, da er asynchron ist. Sie übergeben ihm also eine Funktion, die die API aufrufen kann, wenn die asynchrone Aufgabe ausgeführt wurde.
Das einfachste Beispiel, das ich mir in JavaScript vorstellen kann, ist die
setTimeout()
Funktion. Es ist eine globale Funktion, die zwei Argumente akzeptiert. Das erste Argument ist die Rückruffunktion und das zweite Argument ist eine Verzögerung in Millisekunden. Die Funktion wartet die entsprechende Zeit und ruft dann Ihre Rückruffunktion auf.Möglicherweise haben Sie den obigen Code schon einmal gesehen, aber nicht bemerkt, dass die Funktion, die Sie übergeben haben, als Rückruffunktion bezeichnet wurde. Wir könnten den obigen Code umschreiben, um ihn offensichtlicher zu machen.
Rückrufe werden überall in Node verwendet, da Node von Grund auf so aufgebaut ist, dass es bei allem, was es tut, asynchron ist. Auch wenn Sie mit dem Dateisystem sprechen. Aus diesem Grund akzeptieren eine Tonne der internen Knoten-APIs Rückruffunktionen als Argumente, anstatt Daten zurückzugeben, die Sie einer Variablen zuweisen können. Stattdessen wird Ihre Rückruffunktion aufgerufen und die gewünschten Daten als Argument übergeben. Sie können beispielsweise die Knotenbibliothek
fs
zum Lesen einer Datei verwenden. Dasfs
Modul stellt zwei eindeutige API-Funktionen zur Verfügung:readFile
undreadFileSync
.Die
readFile
Funktion ist asynchron, während diesreadFileSync
offensichtlich nicht der Fall ist. Sie können sehen, dass sie beabsichtigen, die asynchronen Aufrufe zu verwenden, wann immer dies möglich ist, da sie sie aufgerufen habenreadFile
undreadFileSync
anstelle vonreadFile
undreadFileAsync
. Hier ist ein Beispiel für die Verwendung beider Funktionen.Synchron:
Der obige Code blockiert die Thread-Ausführung, bis der gesamte Inhalt von
test.txt
in den Speicher eingelesen und in der Variablen gespeichert wurdedata
. Im Knoten wird dies normalerweise als schlechte Praxis angesehen. Es gibt jedoch Situationen, in denen es nützlich ist, z. B. wenn Sie ein schnelles kleines Skript schreiben, um etwas Einfaches, aber Mühsames zu tun, und es Ihnen nicht wichtig ist, jede Nanosekunde Zeit zu sparen, die Sie können.Asynchron (mit Rückruf):
Zuerst erstellen wir eine Rückruffunktion, die zwei Argumente akzeptiert
err
unddata
. Ein Problem bei asynchronen Funktionen besteht darin, dass es schwieriger wird, Fehler abzufangen, sodass viele APIs im Rückrufstil Fehler als erstes Argument an die Rückruffunktion übergeben. Es wird empfohlen, zu überprüfen, oberr
ein Wert vorliegt, bevor Sie etwas anderes tun. Wenn ja, beenden Sie die Ausführung des Rückrufs und protokollieren Sie den Fehler.Synchrone Aufrufe haben einen Vorteil, wenn Ausnahmen ausgelöst werden, da Sie sie einfach mit einem abfangen können
try/catch
Block .In asynchronen Funktionen funktioniert das nicht so. Der API-Aufruf wird sofort zurückgegeben, sodass mit dem nichts zu fangen ist
try/catch
. Richtige asynchrone APIs, die Rückrufe verwenden, erkennen immer ihre eigenen Fehler und übergeben diese Fehler dann an den Rückruf, wo Sie sie nach Belieben behandeln können.Zusätzlich zu Rückrufen gibt es jedoch einen anderen beliebten API-Stil, der häufig als Versprechen bezeichnet wird. Wenn Sie darüber lesen möchten, können Sie den gesamten Blog-Beitrag lesen, den ich basierend auf dieser Antwort hier geschrieben habe .
quelle
Hier ist ein Beispiel für das Kopieren von Textdateien mit
fs.readFile
undfs.writeFile
:Und das ist ein Beispiel für die Verwendung von
copyFile
Funktionen:Das allgemeine Muster node.js legt nahe, dass das erste Argument der Rückruffunktion ein Fehler ist. Sie sollten dieses Muster verwenden, da alle Kontrollflussmodule darauf angewiesen sind:
quelle
Versuchen Sie dieses Beispiel so einfach wie möglich zu lesen. Kopieren Sie einfach save newfile.js do node newfile, um die Anwendung auszuführen.
quelle
Wir erstellen eine einfache Funktion als
quelle
'fs' ist ein Knotenmodul, mit dem Sie Dateien lesen können. Die Rückruffunktion stellt sicher, dass Ihre Datei mit dem Namen 'input.txt' vollständig gelesen wird, bevor sie ausgeführt wird. Mit der Funktion fs.stat () werden Dateiinformationen wie Dateigröße, Erstellungsdatum und Änderungsdatum abgerufen.
quelle
quelle
A
callback
ist eine Funktion, die als Parameter an aHigher Order Function
( Wikipedia ) übergeben wird. Eine einfache Implementierung eines Rückrufs wäre:Um die Funktion aufzurufen, übergeben Sie einfach eine andere Funktion als Argument an die definierte Funktion.
quelle
Dieser Blog-Beitrag hat eine gute Zusammenfassung:
https://codeburst.io/javascript-what-the-heck-is-a-callback-aba4da2deced
quelle