es8 función asíncrona async / await


Función asincrónica

async / await son dos nuevas palabras clave de función agregadas a ES8, que permiten que el código escrito de manera síncrona se ejecute de forma asincrónica

1. asíncrono

La palabra clave async se utiliza para declarar funciones asincrónicas. Esta palabra clave se puede utilizar antes de declaraciones de funciones, expresiones de funciones, funciones de flecha y métodos.

    async function f() {
    
    
        return 1;
    }

Si la función asincrónica devuelve un valor con devolución (si no hay devolución, devolverá indefinido), este valor se incluirá automáticamente en una Promesa resuelta y el resultado es el valor

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

async asegura que la función devuelve una Promesa y también envuelve valores que no son Promesa en ella

2. esperar

await solo funciona en la función asíncrona Esta palabra clave puede suspender la ejecución del código de la función asíncrona y esperar a que se resuelva la Promesa.

    async function f() {
    
    

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

La función se pausa en la línea de espera hasta que
se obtiene el valor de p cuando la promesa se establece y continúa ejecutándose. En comparación con la promesa, entonces, es solo una sintaxis más elegante para obtener el resultado de la promesa, y también es más fácil leer y escribir.
La función anterior se puede reescribir como:

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

ps. Await no se puede usar en funciones ordinarias y no se puede usar en contextos de nivel superior como <script>etiquetas M , pero las funciones asincrónicas se pueden definir y ejecutar inmediatamente

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

Para comprender completamente la palabra clave await, debe saber que no se trata solo de esperar a que haya un valor disponible. Cuando el tiempo de ejecución de JavaScript encuentra la palabra clave await, registrará dónde se suspende la ejecución. Cuando el valor a la derecha de await está disponible, el tiempo de ejecución de JavaScript enviará una tarea a la cola de mensajes y esta tarea reanudará la ejecución de la función asincrónica.

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

Incluso si await va seguido de un valor disponible de inmediato, la parte posterior de la función se evaluará de forma asincrónica

para resumir

Una función asincrónica es el resultado de aplicar un contrato a una función de JavaScript. Las funciones asincrónicas pueden suspender la ejecución sin bloquear el hilo principal.

La palabra clave async antes de la función tiene dos efectos:

  1. Esta función siempre devuelve una promesa.
  2. Está permitido usar await dentro de esta función.

La palabra clave aguardar antes de que la promesa haga que el motor de JavaScript espere a que la promesa se establezca y luego:

  1. Si hay un error, se lanzará una excepción, al igual que se llamó a throw error allí.
  2. De lo contrario, se devuelve el resultado.

Supongo que te gusta

Origin blog.csdn.net/S_aitama/article/details/111146828
Recomendado
Clasificación