Dieser Artikel geht hauptsächlich Schritt für Schritt auf das Problem der asynchronen JavaScript-Aufrufe ein. Der Antwortprozess ist diesem Artikel beigefügt. Ich hoffe, er kann jedem helfen, ihn besser zu meistern Asynchrone JavaScript-Aufrufe.
Problem
Sie können die aa()-Funktion unten ändern. Der Zweck besteht darin, console.log() zu verwenden, um den gewünschten Wert auszugeben
function aa() { setTimeout(function() { return "want-value"; }, 1000); }
Es gibt jedoch zusätzliche Anforderungen:
aa()-Funktion kann nach Belieben geändert werden, es kann jedoch keine console.log() geben
Führen Sie console.log aus. In der ()-Anweisung darf kein setTimeout-Paket enthalten sein
Antwort
Vielleicht ist das eine Interviewfrage, was auch immer. Der Hauptzweck der Frage besteht darin, die Verarbeitung der Ergebnisse der asynchronen Aufrufausführung zu untersuchen. Da es sich um einen asynchronen Aufruf handelt, ist es nicht möglich, synchron auf das Ergebnis zu warten.
setTimeout(). wird häufig zur Simulation asynchroner Vorgänge verwendet. Zunächst erfolgte die asynchrone Benachrichtigung (Aufruf) der Verarbeitungsergebnisse des Handlers über Rückrufe
function aa(callback) { setTimeout(function() { if (typeof callback === "function") { callback("want-value"); } }, 1000); } aa(function(v) { console.log(v); });
Wenn Rückrufe jedoch in größeren asynchronen Anwendungen verwendet werden, treten viele Fehler auf Die Ebenen sind verschachtelt, daher wurden später einige Vorschläge gemacht, sie zu „flachen“. In diesem Teil können Sie sich auf die „Abflachung“ asynchroner Chat-Aufrufe beziehen. Natürlich ist Promise eine sehr beliebte Methode und wurde schließlich von ES6 übernommen. Verwenden Sie Promise, um es wie folgt zu implementieren:
function aa() { return new Promise(resolve => { setTimeout(function() { resolve("want-value"); }, 1000); }); } aa().then(v => console.log(v));
Was dieses Beispiel betrifft, ähnelt es dem vorherigen Callback-Beispiel. Allerdings wird es derzeit zu einer empfohleneren Methode führen – async/await, unterstützt ab ES2017:
function aa() { return new Promise(resolve => { setTimeout(function() { resolve("want-value"); }, 1000); }); } async function main() { const v = await aa(); console.log(v); } main();
aa() Definition und Promise-Methode Die Definition ist die Dasselbe, aber beim Aufruf wird „await“ verwendet, um asynchron zu warten. Nach dem Warten auf das asynchrone Ergebnis wird console.log() verwendet, um es zu verarbeiten.
An dieser Stelle ist zu beachten, dass „await“ nur in asynchronen Methoden verwendet werden kann. Um „await“ zu verwenden, müssen Sie also eine asynchrone Hauptmethode definieren und diese im globalen Bereich aufrufen. Da die Hauptmethode asynchron ist (als asynchron deklariert), wird diese Anweisung zuerst ausgeführt, wenn nach dem Aufruf von main () andere Anweisungen vorhanden sind, z. B. console.log ("hello").
Die Async/Await-Syntax macht das Schreiben asynchroner Aufrufe wie das Schreiben von synchronem Code. Beim Schreiben von Code können Sie logische Sprünge vermeiden und das Schreiben vereinfachen. (Referenz: Von der Hölle zum Himmel, Node-Callback ändert sich zu async/await)
Natürlich kann die Definition von main() und der anschließende Aufruf von main() mit IIFE gekapselt werden,
(async () => { const v = await aa(); console.log(v); })();
Verwandte Empfehlungen:
PHP-Methode zur Implementierung asynchroner Multithreading-Aufrufe
Informationen zur asynchronen Aufrufmethode von JavaScript
Asynchrone PHP-Aufrufimplementierungsmethode
Das obige ist der detaillierte Inhalt vonBeispielanalyse für einen asynchronen JavaScript-Aufruf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!