Problema com sequencia das chamadas das funções

3 respostas
H

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

3 Respostas

P

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.

H

Bom dia peczenyj,

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

Obrigado

H

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

Criado 19 de outubro de 2016
Ultima resposta 24 de out. de 2016
Respostas 3
Participantes 2