Heim > Web-Frontend > js-Tutorial > Hauptteil

Informationen zu asynchronen Aufrufmethoden von JavaScript

一个新手
Freigeben: 2017-10-25 13:32:48
Original
2242 Leute haben es durchsucht

Problem

Sie können die aa()-Funktion unten ändern, um console.log() zu verwenden, um want-value

function aa() {
    setTimeout(function() {
        return "want-value";
    }, 1000);
}
Nach dem Login kopieren

nach einer Sekunde auszugeben. Allerdings gibt es solche zusätzliche Anforderungen:

  1. aa() Die Funktion kann nach Belieben geändert werden, es darf jedoch keine console.log()

  2. Executeconsole.log()-Anweisung vorhanden sein und es kann kein setTimeoutPaket

Antwort

Vielleicht ist das eine Interviewfrage, egal. Der Hauptzweck der Frage besteht darin, die Verarbeitung von asynchronen Aufrufausführungsergebnissen zu untersuchen. Da es sich um einen asynchronen Aufruf handelt, ist es für nicht möglich, synchron auf das asynchrone Ergebnis zu warten >

wird häufig zum Simulieren asynchroner Vorgänge verwendet. Zunächst erfolgte die asynchrone Benachrichtigung (Aufruf) der Verarbeitungsergebnisse des Handlers über Rückrufe

setTimeout()

Wenn Rückrufe jedoch in größeren asynchronen Anwendungen verwendet werden, neigen sie zu einer mehrschichtigen Verschachtelung, so einige Um es zu „flachen“, kann sich dieser Teil 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(callback) {
    setTimeout(function() {
        if (typeof callback === "function") {
            callback("want-value");
        }
    }, 1000);
}

aa(function(v) {
    console.log(v);
});
Nach dem Login kopieren

Was dieses Beispiel betrifft, ähnelt es dem vorherigen Callback-Beispiel. Dies wird jedoch derzeit zu einer empfohleneren Methode führen – async/await, die ab ES2017 unterstützt wird: Die Definition von
function aa() {
    return new Promise(resolve => {
        setTimeout(function() {
            resolve("want-value");
        }, 1000);
    });
}

aa().then(v => console.log(v));
Nach dem Login kopieren

function aa() {
    return new Promise(resolve => {
        setTimeout(function() {
            resolve("want-value");
        }, 1000);
    });
}

async function main() {
    const v = await aa();
    console.log(v);
}

main();
Nach dem Login kopieren
ist dieselbe wie die Definition in der Promise-Methode, jedoch im Aufruf Wenn Sie

verwenden, warten Sie asynchron, nachdem Sie auf das asynchrone Ergebnis gewartet haben, und verwenden Sie aa(), um es zu verarbeiten. awaitconsole.log()Hier ist zu beachten, dass

nur in der

-Methode verwendet werden kann. Um await verwenden zu können, müssen Sie also eine Hauptmethode von async definieren und diese in der aufrufen globalen Geltungsbereich. Da die Hauptmethode asynchron ist (als asynchron deklariert), wird dieser Satz zuerst ausgeführt, wenn nach dem Aufruf von await weitere Anweisungen vorhanden sind, z. B. async. main()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 das Definieren von

und das anschließende Aufrufen von

mit IIFE gekapselt werden, main()main()

(async () => {
    const v = await aa();
    console.log(v);
})();
Nach dem Login kopieren


Das obige ist der detaillierte Inhalt vonInformationen zu asynchronen Aufrufmethoden von JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage