1
resposta

Retorno do fetch

Olá Flávio, estou tentando trabalhar com o fetch mas ainda estou enrolado, ele retorna um promise mas preciso dos dados da promise, vou colocar o código para tentar te explicar. Este código é apenas um exemplo e não está acabado, é só teste:

        var codigos, fatEnviado;
        var url       = `faturamento_fetch.asp?op=1&data1=${filtrodata1}&data2=${filtrodata2}`;

        controler
            .leFaturamento(url)
            .then(res => {

                console.log(res);
                res.map( valor => {

                    fatEnviado = controler.leFatEnviado(valor.id_empresa);

                    //console.log(valor.id_empresa, fatEnviado);
                });

            });

O código acima está funcionando perfeitamente me retornando um array com as informações do banco, entretanto preciso unir a esse array uma informação que vem de outra base de dados, então chamo outra classe dentro do controler chamada leFatEnviado passando uma das informações que recebi na primeira leitura. O problema é que eu não quero um retorno promise, quero um valor mas acho que não estou conseguindo separá-lo da promise. Segue abaixo o controler:

class NegociacaoControler {

    constructor() {
        this._http  = new HttpService();    
    }

    leFaturamento(url) {

        return this._http
            .get(url)
            .then(res => res)
            .catch(erro => console.log(erro));

    }

    leFatEnviado(id_empresa) {
        var objeto;
        var retorno = [];
        var url     = `faturamento_fetch.asp?op=2&id_empresa=${id_empresa}`;    

        this._http
            .get(url)
            .then(res => {

                if (res.length > 0) {

                    res.map( valor => {
                        objeto = {
                            data: valor.data,
                            data_visual: valor.data_visual
                        };
                    });

                } else {

                    objeto = {
                        data: null,
                        data_visual: null
                    };

                }
            })
            .catch(erro => console.log(erro));

        return retorno.push(objeto);

    }    
}

Se puder me dar uma ajudinha, valeu...

1 resposta

Oi Andre, tudo bem? Bom, você não vai conseguir se livrar da Promise, então uma solução possível é que no resultado da primeira requisição, você efetue a segunda, algo como:

this._http .get(url).then(res => {
    this._http.get(url).then( ... ).catch();
})

É até OK pra mim fazer assim se forem duas requisições relacionadas. Uma certamente depende da outra.

Outra alternativa é usar o Promise.all(), nela você encadeia as duas requisições e recebe os resultados em um array final. Neste caso, você teria um array de arrays.

Para ler mais sobre o Promise.all: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all