Callback-Funktionen in Node.js

Isaac Tony 12 Oktober 2023
  1. Verwendung von die Callback-Funktion zum synchronen Lesen einer Datei (Blockierungscode) in Node.js
  2. Verwendung von die Callback-Funktion zum asynchronen Lesen einer Datei (nicht blockierender Code) in Node.js
Callback-Funktionen in Node.js

Eine Callback-Funktion ist eine Funktion, die ausgeführt wird, nachdem eine Reihe von Aufgaben ausgeführt wurden, wodurch die Blockierung des gesamten Programms abgewendet wird. Callback-Funktionen sind ein wichtiger Aspekt beim Schreiben von asynchronen und nicht blockierenden Programmen in Node.js.

In JavaScript werden Callback-Funktionen formal als Funktionen bezeichnet, die als Argumente an andere Funktionen übergeben werden. Da JavaScript-Funktionen in der Reihenfolge ausgeführt werden, in der sie aufgerufen werden, können wir mit Callbacks besser steuern, wie Funktionen ausgeführt werden.

Angenommen, wir haben zwei eng verwandte Funktionen, sodass das Ergebnis einer Funktion als Parameter in der anderen Funktion verwendet wird. In einem solchen Szenario blockiert die Anfangsfunktion immer die zweite Funktion, bis das Ergebnis der Anfangsfunktion fertig ist.

Durch die Verwendung von Callback-Funktionen können wir jedoch sicherstellen, dass die ursprüngliche Funktion immer die letzte Funktion als Callback-Funktion ausführt, nachdem sie ihre Anweisungen ausgeführt hat, wie unten gezeigt.

function print(callback) {
  callback();
}

Verwendung von die Callback-Funktion zum synchronen Lesen einer Datei (Blockierungscode) in Node.js

Node.js-Callbacks bilden die Grundlage für die Ausführung asynchroner Operationen, wodurch Node.js für die Entwicklung von E/A-intensiven Anwendungen geeignet ist. Bei solchen Anwendungen müssen oft riesige Datenmengen vom Server abgerufen werden.

Das Laden großer Datenmengen ist ein langer Prozess, und daher ist es keine gute Praxis, darauf zu warten, dass das Programm die Daten vollständig lädt, bevor es den Rest ausführt.

Im folgenden Beispiel verwenden wir das Modul fs in Node.js, um Daten synchron zu lesen, bevor der Rest des Codes ausgeführt wird.

// Write JavaScript code
var fs = require('fs');

var filedata = fs.readFileSync('usersinfo.txt');
console.log(filedata.toString());
console.log('Other parts of the program that execute afterwards');
console.log('End of program execution');

Beispielausgabe:

First name: john
Last name: Doe
Occupation: Microservices Developer

Other parts of the program that execute afterward
End of program execution

Verwendung von die Callback-Funktion zum asynchronen Lesen einer Datei (nicht blockierender Code) in Node.js

Das synchrone Lesen einer Datei blockiert die Ausführung von Teilen anderer Programme, bis die Daten vollständig gelesen sind. In Fällen, in denen die Daten sehr groß sind, müssen wir möglicherweise etwas länger warten.

Wie unten gezeigt, können wir jedoch eine Funktion ausführen, die diese Daten mithilfe von Callback-Funktionen asynchron im Hintergrund liest, während andere Teile des Programms ausgeführt werden.

var fs = require('fs');

fs.readFile('usersinfo.txt', function(err, data) {
  if (err) return console.error(err);
  console.log(data.toString());
});
console.log('Other parts of the program that execute afterward');

Beispielausgabe:

Other parts of the program that execute afterward
firstname: john
lastname: Doe
Occupation: Microservices Developer

Unter Verwendung des Callback-Funktionskonzepts in den obigen Programmen können wir andere Teile der Programme ausführen, während die Daten im Hintergrund geladen werden.

Darüber hinaus haben wir im obigen Code auch die Standardkonvention zum Zurückgeben von Fehlern als erstes Argument in der Callback-Funktion befolgt. Das erste Objekt sollte, wenn es nicht null ist, als Fehlerobjekt betrachtet werden; andernfalls sollte es null bleiben.

Es bietet eine einfachere Möglichkeit zu erkennen, dass ein Fehler aufgetreten ist. Da die Rückruffunktion ausgeführt werden soll, nachdem die Hauptfunktion andere Operationen ausgeführt hat, ist es herkömmlicherweise üblich, sie als zweiten Parameter zu haben.

Es wird erwartet, dass praktisch jede asynchrone Funktion, die die Callback-Funktion verwendet, der folgenden Syntax in Node.js folgt.

function asyncOperation(param1, param2, callback) {
  // operations to be executed
  if (err) {
    console.log('An error has occured!');
    return callback(new Error('An error'));
  }
  // ... more work ...
  callback(null, param1, param2);
}

asyncOperation(parameters, function(err, returnValues) {
  // This code gets run after the async operation
});
Autor: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn