es8 asynchrone Funktion async / await


Asynchrone Funktion

async / await sind zwei neue Funktionsschlüsselwörter, die zu ES8 hinzugefügt wurden, sodass synchron geschriebener Code asynchron ausgeführt werden kann

1. asynchron

Das Schlüsselwort async wird zum Deklarieren asynchroner Funktionen verwendet. Dieses Schlüsselwort kann vor Funktionsdeklarationen, Funktionsausdrücken, Pfeilfunktionen und Methoden verwendet werden

    async function f() {
    
    
        return 1;
    }

Wenn die asynchrone Funktion einen Wert mit return zurückgibt (wenn es keine Rückgabe gibt, wird undefiniert zurückgegeben), wird dieser Wert automatisch in ein aufgelöstes Versprechen eingeschlossen, und das Ergebnis ist der Wert

    async function f() {
    
    
        return 1;
    }
    f().then(console.log); // 1

async stellt sicher, dass die Funktion ein Versprechen zurückgibt und auch Nicht-Versprechen-Werte darin einschließt

2. warten

wait funktioniert nur in der asynchronen Funktion. Dieses Schlüsselwort kann die Ausführung des asynchronen Funktionscodes unterbrechen und auf die Auflösung des Versprechens warten.

    async function f() {
    
    

        let promise = new Promise((resolve, reject) => {
    
    
            setTimeout(() => resolve("done!"), 1000)
        });
        let p = await promise;  // 暂停
        console.log(p); // 一秒后 "done!";
    }
    f();

Die Funktion wird in der
Wartezeile angehalten, bis der Wert von p erhalten wird, wenn sich das Versprechen einstellt und weiter ausgeführt wird. Im Vergleich zu Versprechen ist dies nur eine elegantere Syntax, um das Ergebnis des Versprechens zu erhalten, und es ist auch einfacher lesen und schreiben.
Die obige Funktion kann wie folgt umgeschrieben werden:

    let promise = new Promise((resolve,reject)=>{
    
    
        setTimeout(()=> resolve("done!"),1000)
    });
    promise.then(console.log);

ps. Await kann nicht in normalen Funktionen und nicht in Kontexten der obersten Ebene wie M- <script>Tags verwendet werden, aber asynchrone Funktionen können sofort definiert und ausgeführt werden

    (async function f(){
    
    
        console.log(await Promise.resolve(1));
    })();

Um das Schlüsselwort await vollständig zu verstehen, müssen Sie wissen, dass es nicht nur darauf wartet, dass ein Wert verfügbar ist. Wenn die JavaScript-Laufzeit auf das Schlüsselwort await stößt, wird aufgezeichnet, wo die Ausführung angehalten wird. Wenn der Wert auf der rechten Seite des Wartens verfügbar ist, verschiebt die JavaScript-Laufzeit eine Aufgabe in die Nachrichtenwarteschlange, und diese Aufgabe setzt die Ausführung der asynchronen Funktion fort.

    async function foo() {
    
    
        console.log(2);
        await null;
        console.log(4);
    }
    console.log(1);
    foo();
    console.log(3);
    // 1
    // 2
    // 3
    // 4

Selbst wenn auf das Warten ein sofort verfügbarer Wert folgt, wird der spätere Teil der Funktion asynchron ausgewertet

um zusammenzufassen

Eine asynchrone Funktion ist das Ergebnis der Anwendung eines Vertrags auf eine JavaScript-Funktion. Asynchrone Funktionen können die Ausführung unterbrechen, ohne den Hauptthread zu blockieren.

Das Schlüsselwort async vor der Funktion hat zwei Auswirkungen:

  1. Diese Funktion gibt immer ein Versprechen zurück.
  2. Innerhalb dieser Funktion darf wait verwendet werden.

Das Schlüsselwort, das vor dem Versprechen wartet, lässt die JavaScript-Engine warten, bis das Versprechen erfüllt ist, und dann:

  1. Wenn ein Fehler auftritt, wird eine Ausnahme ausgelöst - genau wie dort ein Wurffehler aufgerufen wurde.
  2. Andernfalls wird das Ergebnis zurückgegeben.

Ich denke du magst

Origin blog.csdn.net/S_aitama/article/details/111146828
Empfohlen
Rangfolge