Ein Callback-Funktion ist einfach eine Funktion, die Sie in einer anderen Funktion übergeben, so dass Funktion es zu einem späteren Zeitpunkt aufrufen kann. Dies wird üblicherweise in asynchronen API s gesehen; Der API-Aufruf wird sofort zurückgegeben, da er asynchron ist. Sie übergeben also eine Funktion, die die API aufrufen kann, wenn die asynchrone Task 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 Callback-Funktion und das zweite Argument ist eine Verzögerung in Millisekunden.Die Funktion ist so konzipiert, dass sie die entsprechende Zeitspanne wartet und anschließend die Rückruffunktion aufruft.
setTimeout(function() {
console.log("10 seconds later...");
}, 10000);
Möglicherweise haben Sie den obigen Code vor gesehen, aber nur nicht erkennen, die Funktion, die Sie in eine Callback-Funktion aufgerufen wurde vorbei waren. Wir könnten den obigen Code umschreiben, um es deutlicher zu machen.
var callback = function() {
console.log("10 seconds later...");
};
setTimeout(callback, 10000);
Rückrufe sind überall in Knoten verwendet, da Knoten aus dem Boden aufgebaut wird in alles asynchron zu sein, der es tut. Auch im Gespräch mit dem Dateisystem. Aus diesem Grund akzeptieren viele der internen Node-APIs Rückruffunktionen als Argumente und geben keine Daten zurück, die Sie einer Variablen zuweisen können. Stattdessen ruft es Ihre Callback-Funktion auf und übergibt die gewünschten Daten als Argument. Zum Beispiel könnten Sie die fs
-Bibliothek von Node verwenden, um eine Datei zu lesen. Das Modul fs
bietet zwei einzigartige API-Funktionen: readFile
und readFileSync
.
Die readFile
Funktion ist asynchron, während readFileSync
offensichtlich nicht ist. Sie können sehen, dass Sie die asynchronen Aufrufe so oft wie möglich verwenden möchten, da sie readFile
und readFileSync
anstelle von readFile
und readFileAsync
genannt wurden. Hier ist ein Beispiel für die Verwendung beider Funktionen.
Synchron:
var data = fs.readFileSync('test.txt');
console.log(data);
Der obige Code Ausführungsblöcke Thread, bis der gesamte Inhalt des test.txt
werden in den Speicher gelesen und in der Variablen data
gespeichert. Im Knoten wird dies typischerweise als schlechte Praxis angesehen. Es gibt jedoch Zeiten, in denen es nützlich ist, zum Beispiel wenn man ein kleines Skript schreibt, um etwas Einfaches, aber Langweiliges zu tun, und es dir nicht so wichtig ist, jede Nanosekunde Zeit zu sparen, die du kannst.
Asynchronous (mit Rückruf):
var callback = function (err, data) {
if (err) return console.error(err);
console.log(data);
};
fs.readFile('test.txt', callback);
Zuerst erstellen wir eine Callback-Funktion, die zwei Argumente err
und data
akzeptiert. Ein Problem mit asynchronen Funktionen besteht darin, dass es schwieriger wird, Fehler einzufangen, so dass viele Callback-APIs Fehler als erstes Argument an die Callback-Funktion übergeben. Es empfiehlt sich, zu überprüfen, ob err
einen Wert hat, bevor Sie etwas anderes tun. Ist dies der Fall, beenden Sie die Ausführung des Rückrufs und protokollieren Sie den Fehler.
Synchrone Aufrufe haben einen Vorteil, wenn Ausnahmen ausgelöst werden, weil Sie sie einfach mit einem Block abfangen können.
In asynchronen Funktionen funktioniert es nicht so. Der API-Aufruf kehrt sofort zurück, so dass nichts mit der try/catch
zu fangen ist. Ordnungsgemäße asynchrone APIs, die Rückrufe verwenden, werden immer ihre eigenen Fehler abfangen und diese Fehler dann an den Rückruf weitergeben, wo Sie sie nach eigenem Ermessen behandeln können.
Zusätzlich zu den Callbacks gibt es einen anderen populären API-Stil, der häufig als "Promise" bezeichnet wird. Wenn Sie über sie lesen möchten, können Sie den gesamten Blogpost lesen, den ich basierend auf dieser Antwort geschrieben habe here.
ein Beispiel dafür, wie eine Funktion zu schreiben, die einen Rückruf als Argument? – Gntem
Ja, so etwas, ein einfaches Beispiel, das mir hilft, es zu verstehen. –
Ein Callback ist eine Funktion, die Sie als Parameter an eine andere Funktion übergeben ... Google pls -> "Callback Javascript" -> erstes Ergebnis –