Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Execução sem concorrência de código

var codigoProduto = 1;

if(codigoProduto ){
    produtosDao.carrega(codigoProduto , function(err, result){
            console.log('a1');
    });

    console.log('a2');
}

console.log('a3');

No trecho de código acima a saída do servidor fica:

a2 a3 a1

Isto porque o Node executa em código concorrente, ou seja, enquanto está executando a ação produtosDao.carrega, abre-se outra tarefa para executar o restante do código até que a consulta fique pronta!

Porém, como devo proceder para que execute na forma estrutural, e a saída fique:

a1 a2 a3

5 respostas
solução!

Oi Markos, tudo bem? Essa é a natureza padrão do Node, ele trabalha muito com a questão de loop de eventos... Para sequenciar e tirar esse comportamento assíncrono, acho que não tem uma forma simples.

Nas versões mais recentes do node você pode usar Promisses para garantir que uma operação vai acontecer após outra mesmo sendo assíncronas. Talvez usar assync/await também com esse propósito ou utilizar da classe EventEmmiter do próprio Node, onde você pode emitir e ouvir a eventos.

Mas talvez a forma mais simples seja, crescendo a pilha de callbacks.

Essas são as formas que eu conheço.

E ai Wanderson boa noite, tudo certo cara! Opa obrigado pela resposta, eu vou pesquisar estas informações com mais calma e qualquer coisa eu posto aqui neste tópico.

Mas a dúvida surgiu pois meu desejo é popular um objeto em 'a1' e trabalhar com ele populado em 'a3'.

Mas enfim, acredito que aumentando a pilha de callbacks seria a mais fácil mesmo.

Valeu man! abras

Entendo, esse é o mais simples mesmo. Analisa as opções que te passei e vê qual a que você se sente mais a vontade.

Markos, lembra sempre de marcar o post como resolvido quando a resposta tiver solucionado sua dúvida tá bem?

Olá Wanderson, boa tarde. Acrescentando a pilha deu certo. Obrigado.

Boa, mas continue estudando, veja padrões de projetos e uso de promisses e tudo mais, assim você volta e melhora seu código se for preciso!