O conteúdo deste artigo é muito adequado para iniciantes em Javascript. Será descrito em uma linguagem simples e de fácil compreensão, para que você não precise se preocupar em não entendê-lo.
Promise é um ponto de conhecimento indispensável ao aprender a linguagem Javascript moderna. Muitas pessoas ficam confusas ao lê-lo. O principal motivo pode ser resumido em uma frase:
O código não é mais executado de cima para baixo.
Normalmente, o código que escrevemos é executado sequencialmente, por exemplo, escrevemos um código que conta de 1 a 3.
console.log(1) console.log(2) console.log(3)
Pressione F12 para abrir o console do nosso navegador, copie o código acima nele, pressione Enter e você verá que os números de 1 a 3 são impressos em ordem.
1 2 3
Agora, se temos a exigência de que a ordem dos códigos não pode ser alterada, mas a ordem das impressões finais deve ser independente da ordem dos códigos, podemos fazer isso?
Vamos imaginar que se 1, 2 e 3 forem impressos por três pessoas respectivamente, então será muito simples. Basta informar a eles a tarefa de imprimir números ao mesmo tempo, e a ordem das impressões estará relacionada apenas ao tempo de execução das tarefas.
Então, como atribuímos a tarefa de impressão a três pessoas? É aqui que é usado o Promise. Ao criar um novo objeto Promise, podemos atribuir uma seção de código a um novo “processo” em vez de executá-lo no “processo” atual. Observe que o "processo" aqui não é o mesmo processo do sistema operacional sobre o qual falamos frequentemente, mas é apenas um conceito abstrato, representando uma unidade virtual que executa código em sequência.
Como dissemos há pouco, Promise pode ser considerado um novo "processo", então se quisermos que ele execute qualquer código, podemos envolvê-lo em uma função e entregá-lo a ele. Desta forma, o código não será executado imediatamente.
Promise também nos fornece duas funções, uma é resolver e a outra é rejeitar, que podemos chamar quando a tarefa for concluída e falhar, respectivamente. Essas duas funções são passadas para os parâmetros internos do Promise. Então, podemos montar um assim:
Promise( (resolve, _reject) => { setTimeout(() => { console.log(1) resolve() }, 300) } )
Aqui usamos setTimeout para simular uma tarefa demorada. Em cenários reais, esta tarefa pode ser a leitura de um arquivo, a solicitação de uma interface de rede ou a espera pela entrada do usuário. Quando a tarefa for concluída, chamamos resolvethe função para indicar que a tarefa foi concluída.
Então, seguimos o mesmo método, e prometo que quando montarmos os outros dois, só precisamos fornecer a eles números de impressão diferentes e o tempo necessário para a tarefa. Por fim, o código completo é assim, você pode tentar copiá-lo para o console e tentar.
Promise( (resolve, _reject) => { setTimeout(() => { console.log(1) resolve() }, 300) } ) new Promise( (resolve, _reject) => { setTimeout(() => { console.log(2) resolve() }, 200) } ) new Promise( (resolve, _reject) => { setTimeout(() => { console.log(3) resolve() }, 100) } )
Por fim, a ordem de impressão dos números está relacionada ao tempo de execução das tarefas:
3 2 1
A programação simultânea trata de como simular a execução de um grande número de tarefas simultaneamente em um número limitado de núcleos de CPU. Promise em Javascript fornece uma maneira conveniente e rápida de programação simultânea, bem como um conjunto de especificações para lidar com valores de retorno e valores de erro. Depois de compreender e nos familiarizar com esta especificação, podemos melhorar muito a eficiência do tratamento de tarefas simultâneas.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3