Wie man mit asynchronen Rückruffunktionsrückgaben in JavaScript umgeht
Asynchrone Rückruffunktionen stellen eine Herausforderung dar, wenn Werte aus synchronen Methoden abgerufen werden. Betrachten Sie den folgenden Codeausschnitt, der versucht, einen Standortwert aus einer Rückruffunktion abzurufen:
function foo(address) { geocoder.geocode({ 'address': address }, function (results, status) { results[0].geometry.location; // I want to return this value }); } foo(); // result should be results[0].geometry.location; value
Der Versuch, den Wert direkt zurückzugeben, führt jedoch zu „undefiniert“. Nachfolgende Versuche mit Zwischenvariablen oder Callback-Übergabe sind ebenfalls fehlgeschlagen.
Die Lösung: Callback-Übergabe
Die Rückgabe von Werten aus asynchronen Callback-Funktionen in synchronen Methoden ist nicht möglich. Stattdessen muss ein Rückruf an die asynchrone Funktion übergeben werden, um den Rückgabewert zu erhalten.
function foo(address, fn) { geocoder.geocode({ 'address': address }, function (results, status) { fn(results[0].geometry.location); }); } foo("address", function (location) { alert(location); // this is where you get the return value });
In diesem überarbeiteten Code akzeptiert die foo-Funktion einen Rückruf fn, um den Rückgabewert zu verarbeiten. Die asynchrone Funktion geocoder.geocode übergibt dann den Standortwert als Argument an fn. Die Rückruffunktion kann dann den Standortwert nach Bedarf verwenden.
Überlegungen zur asynchronen Programmierung
Bedenken Sie, dass bei einem asynchronen inneren Funktionsaufruf auch alle umschließenden Funktionen asynchron sein müssen eine Antwort zurückgeben. Wenn Sie mit zahlreichen Rückrufen arbeiten, sollten Sie die Verwendung einer Promise-Bibliothek wie Q in Betracht ziehen, um den Prozess zu vereinfachen.
Das obige ist der detaillierte Inhalt vonWie kann ich Werte von asynchronen Rückruffunktionen in JavaScript abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!