A programação assíncrona em JavaScript foi gradualmente aceita por todos. Anteriormente, as pessoas geralmente o implementavam por meio de aninhamento de retorno de chamada, setTimeout, setInterval etc. O código parece muito inintivo e é difícil entender rapidamente sem olhar para a lógica inteira do código. As funções assíncronas no JavaScript incluem funções de E/S (Ajax, pós -maquiagem, carga img, carga de script, etc.), funções de tempo (setTimeout, setInterval), etc.
Todos nós estamos familiarizados com eles. Em aplicações complexas, geralmente existem várias camadas de nidificação e até pensando que algumas etapas não foram concluídas e as exceções do programa são causadas. O exemplo mais simples é: por exemplo, se você injetar um nó no DOM, deve esperar que o nó seja injetado e opere o nó. Quando um grande número de nós é injetado, geralmente é difícil entender o tempo. Se tivermos o código para confiar nos dados de APIs de terceiros. Não podemos aprender como é a latência uma resposta da API e outras partes do aplicativo podem ser bloqueadas até que ele retorne o resultado. As promessas fornecem uma solução melhor para esse problema, não é bloqueador e é completamente dissociado do código.
Então, deixe -me dar uma olhada na programação assíncrona em JavaScript. Primeiro de tudo, recomendo que você dê uma olhada nas promessas relativamente populares/uma especificação.
Promessas/uma especificação
Nota: Para facilitar a compreensão, a descrição pode diferir das promessas/uma especificação;
As promessas do CommonJS/uma especificação simplifica a programação assíncrona, padronizando as interfaces da API, facilitando o entendimento do nosso código lógico assíncrono.
Chamamos a implementação das promessas/uma especificação. O objeto Promise tem apenas três estados: não realizado, cumprido e falhou; Foi inicialmente criado com um estado não realizado, e o estado só pode mudar de não cumprido para cumprido ou não realizado para falhar (falhado/rejeitado). Uma vez que o estado é cumprido (concluído) ou falhado (falhado/rejeitado), o estado não pode mais mudar.
As promessas/uma especificação fornece uma solução para descrever o conceito de atraso (ou futuro) em um programa. A idéia principal não é executar um método e, em seguida, bloquear o aplicativo e aguardar o resultado de retornar antes de chamar de volta outros métodos, mas retornar um objeto de promessa para satisfazer a escuta futura. Tanto o estado cumprido quanto o estado fracassado podem ser ouvidos. A promessa registra retornos de chamada implementando uma interface então para retornar o objeto Promise:
A cópia do código é a seguinte: então (FulFiledHandler, ErrorHandler, ProgressHandler);
Em seguida, a interface é usada para ouvir para diferentes estados de uma promessa. O FelfilledHandler é usado para ouvir o estado cumprido, o ErrorHandler é usado para ouvir o estado fracassado e o ProgressHandler é usado para ouvir o estado não realizado. A promessa não força a escuta de eventos não realizados (por exemplo, sabemos que a versão antiga do jQuery (1.5, 1.6) diferida é uma implementação da promessa, mas não implementa a audição não realizada.
Acredita -se geralmente que a interface então retorne um novo objeto de promessa, não o objeto de promessa original. Esse novo objeto de promessa pode ser entendido como uma visão do objeto de promessa original. Ele contém apenas um conjunto de métodos do objeto de promessa original. Esses métodos só podem observar o status do objeto de promessa original, mas não podem alterar o estado interno do objeto diferido. Isso pode evitar conflitos entre vários chamadores, o que pode alterar o estado do novo objeto Promise sem afetar outros chamadores.
Além disso, a Promise fornece duas interfaces que implementam transições estaduais do resolução (estado de implementação do inacabado para concluído) e rejeitar (o estado de implementação do inacabado para rejeitar ou falhar).
Envie uma foto para ajudar a entender:
Com promessa, você pode escrever lógica assíncrona com uma mentalidade síncrona. Nas funções assíncronas, você não pode usar o Try/Catch para capturar exceções e não pode lançar exceções. Com promessa, podemos definir diretamente explicitamente um ErrorHandler, que é equivalente a capturar exceções.
A seguir, são apresentadas várias bibliotecas de classes que seguem as promessas/A especificações, quando, q, confirmar rsvp.js, jQuery.deferred, etc.