Nodejs — Tornando uma função assíncrona em uma função síncrona

Paloma Macetko
2 min readDec 2, 2023

--

Olá Gente!

Funções síncronas são excelente ❤, porem, em muitos casos não temos esta opções.

Para este tutorial, iremos executar um “Ping” utilizando a função “child_process” no Nodejs.

A função “child_process” é uma função assíncrona que possui alguns manipuladores que indicam cada mensagem enviada, algum erro e a conclusão do comando.

No exemplo abaixo estamos fazendo um Ping para a Google:

No exemplo acima estamos executando o Ping e manipulando cada mensagem, erros e o final do comando.

Porem, esta função ocorre em paralelo a todas as outras já em execução.

Por exemplo, temos o código abaixo onde estamos fazendo um “console.log” antes e depois do Ping:

console.log(">> Antes do Ping <<");

[Ping Aqui]

console.log(">> Depois do Ping <<");

O resultado é:

Observe que os dois “console.log” são executados e só quando o ping termina que seu resultado é exibido.

Porem, imagine que precisamos do retorno do ping para executar a função seguinte, esta alternativa se tornaria inviável.

Para este caso, o ideal seria utilizar uma função sincronia, utilizando o async/await.

Mas como iremos transformar esta função em uma função assincrona?

Para isto iremos utilizar o “Promise”, que basicamente é uma “Promessa” de que algo ira ser retornado em algum momento.

O promise faz com que o que estiver dentro do promise possa enviar um “resolve” indicando que a função foi finalizada e o “reject” indiando um falha.

Vamos adaptar o Ping para uma função sincrona:

Veja que estamos criando um promise, e no manipulador “close” estamos enviando o “resolve” com tudo que o Ping retornou.

Agora basta chamarmos esta nova função com await:

const init = async function(){

console.log(">> Antes do Ping <<");

try {

const RetPing = await ping("google.com.br");

console.log(RetPing);

} catch(err) {

console.log(err);

}

console.log(">> Depois do Ping <<");

};

init();

Após isto, teremos o seguine retorno:

Veja que o segundo “console.log” só é chamado quando a função “ping” finalizar.

E assim terminamos, pessoal! 👩‍💼

Até a próxima! 👋

--

--

Paloma Macetko
Paloma Macetko

Written by Paloma Macetko

🏳️‍🌈 Mulher Trans 💻 Desenvolvedora Web

No responses yet