função assíncrona es8 async / await


Função assíncrona

async / await são duas novas palavras-chave de função adicionadas ao ES8, permitindo que o código escrito de maneira síncrona seja executado de forma assíncrona

1. assíncrono

A palavra-chave async é usada para declarar funções assíncronas. Esta palavra-chave pode ser usada antes de declarações de função, expressões de função, funções de seta e métodos

    async function f() {
    
    
        return 1;
    }

Se a função assíncrona retornar um valor com retorno (se não houver retorno, ele retornará indefinido), este valor será automaticamente envolvido em uma promessa resolvida, e o resultado é o valor

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

async garante que a função retorne uma promessa e também envolve valores não promissores nela

2. aguardar

await só funciona na função assíncrona.Esta palavra-chave pode suspender a execução do código da função assíncrona e esperar que a promessa seja resolvida.

    async function f() {
    
    

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

A função é pausada na linha de espera até que o valor de p
seja obtido quando a promessa é estabelecida e continua a ser executada. Em comparação com a promessa . Então, é apenas uma sintaxe mais elegante para obter o resultado da promessa, e também é mais fácil ler e escrever.
A função acima pode ser reescrita como:

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

ps. Await não pode ser usado em funções comuns e não pode ser usado em contextos de nível superior, como <script>tags M , mas as funções assíncronas podem ser definidas e executadas imediatamente

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

Para entender completamente a palavra-chave await, você deve saber que ela não está apenas esperando que um valor esteja disponível. Quando o tempo de execução do JavaScript encontra a palavra-chave await, ele registra onde a execução foi suspensa. Quando o valor à direita de await está disponível, o tempo de execução do JavaScript envia uma tarefa por push para a fila de mensagens e essa tarefa retoma a execução da função assíncrona.

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

Mesmo se await for seguido por um valor imediatamente disponível, a última parte da função será avaliada de forma assíncrona

Resumindo

Uma função assíncrona é o resultado da aplicação de um contrato a uma função JavaScript. As funções assíncronas podem suspender a execução sem bloquear o thread principal.

A palavra-chave assíncrona antes da função tem dois efeitos:

  1. Esta função sempre retorna uma promessa.
  2. É permitido usar o await nesta função.

A palavra-chave await antes da promessa faz o mecanismo JavaScript esperar que a promessa seja estabelecida e então:

  1. Se houver um erro, uma exceção será lançada - assim como o lançamento de erro foi chamado lá.
  2. Caso contrário, o resultado é retornado.

Acho que você gosta

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