Venho lendo bastante on-line, tentando descobrir como escrever código JavaScript assíncrono. Uma das técnicas que surgiram muito em minha pesquisa é usar retornos de chamada. Embora eu entenda o processo de como escrever e executar uma função de retorno de chamada, estou confuso por que os retornos de chamada parecem automagicamente tornar a execução do JavaScript assíncrona. Então, minha pergunta é: como a adição de funções de retorno de chamada ao meu código JavaScript faz com que o código seja automaticamente assíncrono?
javascript
asynchronous-programming
Zach Dziura
fonte
fonte
Respostas:
Não faz. Apenas receber um retorno de chamada ou passar uma chamada de retorno não significa que seja assíncrono.
Por exemplo, a
.forEach
função recebe um retorno de chamada, mas é síncrona.Também
setTimeout
recebe um retorno de chamada e é assíncrono.Conectar-se a qualquer evento assíncrono em Javascript sempre exige um retorno de chamada, mas isso não significa que chamar funções ou distribuí-las é sempre assíncrono.
fonte
O segredo da "mágica" é que os eventos aos quais você está atribuindo retornos de chamada são assíncronos. Eles são implementados "sob o capô" para cuidar do que estão fazendo (como recuperar algo de um servidor remoto) em segundo plano, fora da sandbox JS. E depois que terminam seu trabalho, eles enviam uma mensagem ao mecanismo JS para chamar um evento. Quando o mecanismo JS é finalizado com o que está fazendo no momento, ele chama os eventos que estão na fila (ou espera por uma nova mensagem) e, em seguida, seu retorno de chamada é "magicamente" invocado de forma assíncrona!
( NOTA: Esta é uma visão geral conceitual de alto nível do tópico que não entra em detalhes, porque diferentes mecanismos JS implementam as coisas de maneiras diferentes. Mas essa é a ideia geral de como funciona.)
fonte