compreender as promessas de JavaScript

Introdução às promessas

uma promessa é comumente definida como um proxy para um valor que eventualmente se tornará disponível.

promessas são uma maneira de lidar com o código assíncrono, sem ficar preso no inferno de callback.

As promessas têm sido parte da linguagem por anos (padronizado e introduzido no ES2015), e recentemente se tornaram mais integrados, com async e aguardar em ES2017.,funções

async usam promessas nos bastidores, então entender como as promessas funcionam é fundamental para entender como asynceawait trabalho.

como as promessas funcionam, em breve

Uma vez que uma promessa foi chamada, ela começará em um estado pendente. Isto significa que a função de chamada continua executando, enquanto a promessa está pendente até que se resolva, dando à função de chamada quaisquer dados que estavam sendo solicitados.,

criado promessa, vai eventualmente acabar em um estado resolvido, ou em um rejeitada estado, chamando as respectivas funções de retorno de chamada (passado para then e catch) ao terminar.que APIs JS usam promessas?

além do seu próprio código e código de bibliotecas, as promessas são usadas por APIs web modernas padrão, tais como:

  • a API de bateria
  • a API de busca
  • trabalhadores de Serviços

é improvável que em JavaScript moderno você vai encontrar-se não usando promessas, por isso vamos começar a mergulhar neles.,

a Criação de uma promessa

A Promessa de API expõe uma Promessa do construtor, o que você inicializar usando new Promise():

Como você pode ver, a promessa verifica o done global constante, e se isso é verdade, a promessa vai para um estado resolvido (já que o resolve retorno de chamada foi chamado); caso contrário, o reject callback é executado, colocando a promessa em um rejeitada estado., (Se nenhuma dessas funções é chamado no caminho de execução, a promessa de permanecer em um estado pendente)

Usando a tag resolve e reject, podemos comunicar-se de volta para o chamador que a resultante promessa de estado foi, e o que fazer com ele. No caso acima, apenas retornamos uma string, mas pode ser um objeto, ou null também. Porque nós criamos a promessa no trecho acima, ela já começou a executar. Isto é importante para entender o que está acontecendo na seção consumindo uma promessa abaixo.,

um exemplo mais comum que você pode encontrar é uma técnica chamada Promisificação. Esta técnica é uma maneira de ser capaz de usar uma função JavaScript clássica que toma uma resposta, e fazê-la retornar uma promessa:

em versões recentes do nó.js, você não terá que fazer esta conversão manual para uma grande parte da API. Existe uma função promocional disponível no módulo util que fará isso por você, dado que a função que você está promisificando tem a assinatura correta.,

consumindo uma promessa

na última seção, introduzimos como uma promessa é criada.agora vamos ver como a promessa pode ser consumida ou usada.

Com checkIfItsDone() irá especificar funções para executar quando o isItDoneYet promessa resolve (then chamada) ou rejeita (catch chamada).uma promessa pode ser devolvida a outra promessa, criando uma cadeia de promessas.,

um grande exemplo de promessas de encadeamento é a API de obtenção, que podemos usar para obter um recurso e colocar em fila uma cadeia de promessas para executar quando o recurso é obtido.

a API Fetch é um mecanismo baseado em promessas, e chamar fetch()é equivalente a definir a nossa própria promessa usandonew Promise().

Exemplo de encadeamento de promessas

neste exemplo, nós chamamos de fetch() para obter uma lista de itens para FAZER a partir de todos.json arquivo encontrado na raiz do domínio, e nós criamos uma cadeia de promessas.,

Com fetch() retorna uma resposta, que tem muitas propriedades, e, dentro desses nós de referência:

  • status, um valor numérico que representa o código de status HTTP
  • statusText, uma mensagem de status, o que é OK se o pedido conseguiu

response também possui json() método, que retorna uma promessa de que vai resolver com o conteúdo do corpo processadas e transformadas em JSON.,a primeira promessa na cadeia é uma função que definimos, chamada status(), que verifica o estado de resposta e se não é uma resposta de sucesso (entre 200 e 299), rejeita a promessa.

Esta operação fará com que a cadeia de promessas salte todas as promessas acorrentadas listadas e irá saltar directamente para o texto

no fundo, registrando oRequest failedo texto juntamente com a mensagem de erro.,

If that succeeds instead, it calles the json() function we defined. Desde que a promessa anterior, quando bem sucedida, devolveu o objeto response, obtemo-lo como uma entrada para a segunda promessa.

neste caso, devolvemos os dados que o JSON processou, de modo que a terceira promessa recebe o JSON diretamente:

.then((data) => { console.log('Request succeeded with JSON response', data)})

e simplesmente o registramos no console.no exemplo, na seção anterior, tínhamos um id

que foi adicionado à cadeia de promessas.,

Quando qualquer coisa na cadeia de promessas falha e levanta um erro ou rejeita a promessa, o Controle vai para o mais próximo afirmação abaixo da cadeia.

erros de cascata

se dentro do catch()se criar um erro, poderá adicionar um segundocatch() para lidar com ele, e assim por diante.

promessas orquestradas

promessa.,all ()

Se precisar de sincronizar as diferentes promessas, Promise.all() ajuda-o a definir uma lista de promessas e a executar algo quando todas elas estiverem resolvidas.

Exemplo:

O ES2015 desestruturação de atribuição de sintaxe permite que você para também fazer

Promise.all().then(() => { console.log('Results', res1, res2)})

Você não está limitado a usar fetch claro, nenhuma promessa pode ser usado desta forma.prometo.,race ()

Promise.race() corre quando a primeira das promessas que você passa para ele resolve, e ele executa o callback anexado apenas uma vez, com o resultado da primeira promessa resolvida.,

Exemplo:

erros Comuns

não identificada TypeError: indefinido não é uma promessa

Se você obter o Uncaught TypeError: undefined is not a promise erro no console, certifique-se de que você use new Promise() em vez de apenas Promise()

UnhandledPromiseRejectionWarning

Isto significa que uma promessa chamado rejeitado, mas não há uma catch usado para tratar o erro. Adicione a catchapós a ofensathen para lidar com isso corretamente.

Share

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *