Problema com sequencia das chamadas das funções

Boa noite pessoal,

Atualmente estou desenvolvendo um projeto em Node.JS porem estou passando por uma dificuldade enorme, se puderem me ajudar agradeço desde já.

O problema: Estou fazendo um servidor que eh responsavel por coletar os dados da CPU antes e depois de uma consulta ao banco de dados, logo em seguida o servidor manda essas informações para o cliente. Porem como disse a sequencia dos acontecimentos não estão corretos. Acho melhor mostrar o código que falar… Então segue ele.

teste.js (3.8 KB)

Decidi mandar o js para quem preferir baixar e para quem não quiser, segue a imagem do código.

Segue também a imagem dos sysout no console.

Por favor, se puderem me ajudar agradeço.

Abraco

vamos la

o diagnostico do problema é: vc esta supondo que este programa vai respeitar uma dada ordem, porem com node.js vc não sabe. isso mesmo, vc não sabe a ordem de execução dos callbacks. isso é chamado de programação assincrona.

como ter certeza?

bom eu imagino que cpu nesse caso vem do pacote windows-cpu

o totalLoad chama execFile = require('child_process').execFile,

que é descrito como um metodo assincrono

https://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback

portanto vc nao pode supor que lerCpu vai executar o callback quando vc quer.

existem duas formas de controlar isso

no primeiro callback vc pega o antes e prepara o callback para pegar o depois. e ai vc tem os valores certos. sim calback dentro de callback.

Futures e Promises estao ai para ajudar. nao sei como vc utiliza em node.js mas este é o caminho.

nao brinque de assincrono achando que tudo sera sincrono.

Bom dia peczenyj,

Obrigado pela resposta, realmente eu estava confudindo algumas coisas. Refiz o codigo, consegui ter os resultados que eu queria.

Obrigado

Para quem quiser ver, segue o codigo fonte
servidorNode.js (4.8 KB)