GlauberF / ensino-personalizado-suissa

0 stars 0 forks source link

refatoração e correção para que no respSuccess, venha (respSuccess.pessoas e respSuccess.endereco) #1

Open GlauberF opened 7 years ago

GlauberF commented 7 years ago

O que estou fazendo de errado que no res.json() ta indo somente o conteudo de respSuccess.pessoas, e o respSuccess.endereco que esta dentro do if, por mais que to passando ele ao objeto, fora do if ele está inacesivel.

`

.then((d) => { let respSuccess = {};

  respSuccess.pessoas = d;

  // tb endereço
  if (objEndereco.endcli_logradouro || objEndereco.endcli_cep || objEndereco.endcli_bairro ||
      objEndereco.endcli_pais || objEndereco.endcli_cidade || objEndereco.endcli_estado ||
      objEndereco.endcli_numero || objEndereco.endcli_complemento) {
      knex('tb_Endereco_Cliente')
          .insert(objEndereco)
          .then((endId) => {
              knex.select('endcli_id', 'fk_cli_id', 'endcli_logradouro', 'endcli_numero', 'endcli_complemento',
                      'endcli_cep', 'endcli_bairro', 'endcli_pais', 'endcli_cidade', 'endcli_estado',
                      'endcli_latitude', 'endcli_longitude')
                  .from('tb_Endereco_Cliente')
                  .where({ endcli_id: endId['0'] })
                  .then((end) => {
                      respSuccess.endereco = end;
                      //res.json({ data: respSuccess });
                  })
          })
          .catch((err) => {
              return res
                  .status(500)
                  .json({
                      code: 500,
                      data: {}
                  });
          });
  }
  res.json({ data: respSuccess });

`

suissa commented 7 years ago

Está inacessível pois vc tem uma Promise sendo executada com then/catch dentro do if:

.then((endId) => {
              knex.select('endcli_id', 'fk_cli_id', 'endcli_logradouro', 'endcli_numero', 'endcli_complemento',
                      'endcli_cep', 'endcli_bairro', 'endcli_pais', 'endcli_cidade', 'endcli_estado',
                      'endcli_latitude', 'endcli_longitude')
                  .from('tb_Endereco_Cliente')
                  .where({ endcli_id: endId['0'] })
                  .then((end) => {
                      respSuccess.endereco = end;
                      //res.json({ data: respSuccess });
                  })
          })

Entenda que os valores que você recebe dentro do insert só existem dentro do seu then e os dados que vc recebe do select só existem no segundo then.

A melhor forma de trabalhar com Promises é encadeando-as, por exemplo:


  const doSelect = (endId) =>
    knex.select('endcli_id', 'fk_cli_id', 'endcli_logradouro', 'endcli_numero', 'endcli_complemento',
            'endcli_cep', 'endcli_bairro', 'endcli_pais', 'endcli_cidade', 'endcli_estado',
            'endcli_latitude', 'endcli_longitude')
        .from('tb_Endereco_Cliente')
        .where({ endcli_id: endId['0'] })
        .then((end) => {  
            respSuccess.pessoas = d; // nao sei de onde vem

            respSuccess.endereco = end;
            res.json({ data: respSuccess });
        })

  // tb endereço
  if (objEndereco.endcli_logradouro || objEndereco.endcli_cep || objEndereco.endcli_bairro ||
      objEndereco.endcli_pais || objEndereco.endcli_cidade || objEndereco.endcli_estado ||
      objEndereco.endcli_numero || objEndereco.endcli_complemento) {
      knex('tb_Endereco_Cliente')
          .insert(objEndereco)
          .then( doSelect )
          .catch((err) => {
              return res
                  .status(500)
                  .json({
                      code: 500,
                      data: {}
                  });
          });
  }

Não separei o callback do segundo then para não lhe complicar, teste aí!

GlauberF commented 7 years ago

Scope node.js como resolver:

Estou com problema em relação ao scope de node.js e gostaria de uma ajuda para resolver. tenho vários if , sendo que se entrar no if, o objeto instanciado fora, recebe uma nova posição e valor. o detalhe é que o res.json() , eu mando fora dos if e esta info objeto vazio, sendo que ele passou pelos if, veja o arquivo gist: https://gist.github.com/GlauberF/87dfe53f310acac2af83fdcfbdf0328b se possível, como deveria ficar o código para funcionar, neste caso.