Heim >Web-Frontend >js-Tutorial >Wie löse ich das Warten und Blockieren von Rückrufen in Node.js?
Node.js fördert als ereignisgesteuerte Plattform die asynchrone Programmierung, bei der Funktionen Aktionen initiieren und ohne Wartezeit weiter ausführen können für den Abschluss der Aktion. Es kann jedoch Szenarien geben, in denen Sie möchten, dass eine Funktion auf den Aufruf eines Rückrufs wartet, bevor sie einen Wert zurückgibt.
Betrachten Sie den folgenden Codeausschnitt, der darauf abzielt, einen synchronen Aufruf mithilfe der Methode myApi.exec durchzuführen akzeptiert einen Rückruf zur Bearbeitung der Antwort:
function(query) { myApi.exec('SomeCommand', function(response) { return response; }); }
Während die Absicht darin besteht, die vom Rückruf empfangene Antwort zurückzugeben, funktioniert dieser Code nicht ordnungsgemäß und wird sofort zurückgegeben, bevor der Rückruf ausgeführt wird.
Um dieses Problem zu beheben, verwendet Node.js den ereignisgesteuerten Ansatz, bei dem Funktionen nicht für Rückrufergebnisse blockieren sollten. Stattdessen sollten sie einen Rückrufparameter akzeptieren und der Aufrufer sollte eine Funktion zur Verarbeitung des Ergebnisses bereitstellen.
Die richtige Art, diese Funktion zu schreiben, ist:
function(query, callback) { myApi.exec('SomeCommand', function(response) { // Additional processing... callback(response); // "Returning" the response via the callback }); }
Auf diese Weise ist die Funktion wird nicht blockierend und gibt keinen Wert zurück, bis der Rückruf ausgeführt wird. Der Aufrufer sollte es wie folgt verwenden:
myFunction(query, function(returnValue) { // Handle the return value here });
Dieser ereignisgesteuerte Ansatz fördert die asynchrone Programmierung und verhindert Blockierungen, was für eine effiziente Leistung in Node.js-Anwendungen entscheidend ist.
Das obige ist der detaillierte Inhalt vonWie löse ich das Warten und Blockieren von Rückrufen in Node.js?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!