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

Progamando de forma síncrona no nodejs

Boa noite, amigos!

Aproveitando os ensinamentos do curso, estou querendo implementar um projeto no trabalho para por em prática os conceitos.

No código abaixo, necessito que o array só seja montado após o retorno de produtosDAO.listaGabineteCargo e produtosDAO.listaAcumuladorMax.

Utilizando setTimeout, consegui fazer funcionar, mas acredito que haja uma forma mais apropriada para implementar esse código.

Alguma dica de como faço o fluxo do meu código aguardar o retorno de produtosDAO.listaGabineteCargo e produtosDAO.listaAcumuladorMax???

Grato!

app.post("/escolha", function(req, res) {
        var idGabineteCargo = req.body;
        var array = [];
        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);
        connection.connect();
        for(var i=0;i<idGabineteCargo.id_gabinete_cargo.length;i++){
      produtosDAO.listaGabineteCargo(idGabineteCargo.id_gabinete_cargo[i],function(err, results) {
                var local_cargo = tipoCargo(results.rows[0].ds_cargo);
                var acumuladorMax=0;
                produtosDAO.listaAcumuladorMax(local_cargo,function(err, resultado) {
                    acumuladorMax=resultado.rows[0].max;
                });
                //setTimeout(function(){
                    var _config = {
                        orgao_julgador: results.rows[0].ds_orgao_julgador,
                        cargo: results.rows[0].ds_cargo,
                        acumulador: results.rows[0].nr_acumulador_distribuicao,
                        local: local_cargo,
                        maximo: acumuladorMax
                    };
                    array.push(_config);
               // },100);

        });//produtosDAO

              if(i == (idGabineteCargo.id_gabinete_cargo.length-1)){
                  setTimeout(function(){res.render('reposicionamento/escolha', {lista:array})}, 200);
                    //connection.end();
              }
        }//for
    });//escolha
2 respostas
solução!

Opa, a montagem do array precisa ser feita no callback da segunda query.

Alberto, muito obrigado!

Após sua dica e alguns console.log de teste...rsrs....tô conseguindo compreender melhor como funciona o fluxo de execução no NodeJs.

Inclusive, consegui retirar todos os setTimeout e o código está funcionando certinho.

Quando possível, faz mais algum curso de NodeJs com mais dicas e projetos práticos....

vlw!!!

app.post("/escolha", function(req, res) {
        var idGabCargo = req.body;
        var array = [];
        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);
        connection.connect();
        for(var i=0;i<idGabCargo.id_gabinete_cargo.length;i++){
            produtosDAO.listaGabineteCargo(idGabCargo.id_gabinete_cargo[i],function(err, results) {
                let local_cargo = tipoCargo(results.rows[0].ds_cargo);
                let acumuladorMax=0;
                produtosDAO.listaAcumuladorMax(local_cargo,function(err, results2) {
                    let _config = {
                    orgao_julgador: results.rows[0].ds_orgao_julgador,
                    cargo: results.rows[0].ds_cargo,
                    acumulador: results.rows[0].nr_acumulador_distribuicao,
                    local: local_cargo,
                    maximo: results2.rows[0].max
                    };
                    array.push(_config);
                    if(array.length==idGabCargo.id_gabinete_cargo.length){
                        connection.end();
                        res.render('reposicao/escolha', {lista:array});
                    }
                });
              });
          }
     });