O que é JavaScript assíncrono e como ele difere do JavaScript síncrono?

Vamos aprender sobre JavaScript assíncrono. Eventos assíncronos ocorrem em momentos diferentes, independentemente uns dos outros. No contexto do desenvolvimento de software, "assíncrono" refere-se a tarefas que são executadas em segundo plano, independentemente do fluxo principal do programa. A principal vantagem dos processos assíncronos é que eles não bloqueiam a execução do programa principal. Isso é particularmente útil para tarefas que podem levar muito tempo para serem executadas, como buscar dados de um servidor remoto, processar arquivos grandes, lidar com a entrada do usuário e realizar cálculos complexos. Isto é o que conhecemos como programação assíncrona. Esta abordagem contrasta com a técnica tradicional de programação síncrona com a qual você tem trabalhado até agora. Quando você escreve múltiplas linhas de código, geralmente pode prever o que acontecerá e quando acontecerá. A primeira linha será executada, depois a segunda linha e assim por diante na ordem em que você as escreve. Neste exemplo, a primeira linha onde você define a variável será executada primeiro, depois a segunda linha e finalmente a terceira linha onde a string é registrada no console:
const topic = "JavaScript";
const learning = I'm learning ${topic}!;
console.log(learning);
Tudo é sequencial e previsível. Cada linha é concluída antes da próxima começar. Este tipo de programa JavaScript é conhecido como single-threaded. O conceito de threads é muito importante. Uma thread é uma unidade de execução dentro de um processo. É como um fluxo de controle separado dentro do programa. Na programação síncrona, as threads executam sequencialmente, uma após a outra. Se uma thread estiver bloqueada, como esperando por entrada do usuário, todo o processo fica bloqueado até que a thread seja concluída. JavaScript é single-threaded e usa um event loop para lidar com operações assíncronas. Isso permite que o programa continue executando outras tarefas enquanto espera que operações assíncronas, como requisições de rede ou timers, sejam concluídas sem bloquear a thread principal. A programação assíncrona frequentemente envolve callbacks, promises ou async/await para lidar com operações não bloqueantes. Como você aprendeu em lições anteriores, um callback é uma função que você passa para outra função para ser chamada depois. Manipuladores de eventos são um tipo particular de callback com o qual você já trabalhou antes. Eles costumavam ser a forma mais comum de implementar funções assíncronas em JavaScript. No entanto, se a função de callback também aceitar outras funções de callback, o código e a lógica podem ficar bastante complicados muito rapidamente. Atualmente, a técnica mais comumente usada para implementar programação assíncrona em JavaScript é a promise. Uma Promise é um objeto que representa a eventual conclusão (ou falha) de um processo assíncrono e seu valor. O valor de uma promise não é conhecido quando a promise é criada. Só é conhecido quando o processo assíncrono é concluído. Por exemplo, o processo de buscar dados de uma API remota para sua aplicação web pode levar algum tempo. Enquanto isso, você quer que seus usuários tenham uma boa experiência de usuário, certo? Para implementar isso, você pode criar uma promise para manter a interface do usuário ativa e interativa enquanto o processo assíncrono está em execução. Quando o processo for concluído, a promise conterá os dados que foram enviados de volta pela API, para que a aplicação possa manipulá-los ou renderizá-los adequadamente quando estiverem disponíveis. Programação assíncrona é uma ferramenta poderosa para construir aplicações JavaScript eficientes. Ao entender as diferenças entre programação síncrona e assíncrona, você pode escolher a abordagem certa para sua aplicação e escrever um código mais eficiente.
Este módulo não possui perguntas. Marque como concluído.