1
resposta

Mesmo depois do Promise.all as importações ainda não vem em ordem

Eu segui exatamente os exercícios e ja tentei de tudo pra descobrir onde eu errei, alguem consegue me ajudar? Mesmo após o Promise.all, minhas negociacões ainda vem fora da ordem.

NegociaçãoController:

importarNegociacoes() {

        let service = new NegociacoesService();

        Promise.all(
            [
                service.obterNegociacoesDaSemana(),
                service.obterNegociacoesDaSemanaAnterior(),
                service.obterNegociacoesDaSemanaRetrasada()
            ]).then(negociacoes => {
            negociacoes
                .reduce((arrayAchatado, array) => arrayAchatado.concat(array), [])
                .forEach(negociacoes => this._listaNegociacoes.adiciona(negociacoes));
            this._mensagem.text = 'Negociações Importadas com sucesso!';
        }).catch(erro => this._mensagem.texto = erro);
    }

HttpService :

get(url) {

        return new Promise((resolve, reject) => {

            let xhr = new XMLHttpRequest();

            xhr.open('GET', url);

            xhr.onreadystatechange = () => {

                if (xhr.readyState == 4) {

                    if (xhr.status == 200) {

                        console.log('colhendo negociacoes');

                        return resolve(JSON.parse(xhr.responseText));

                    } else {

                        console.log(xhr.responseText);
                        return reject(`Não foi possível importar negociacoes da ${url}`);
                    }
                }

            }
            xhr.send();
        });
    }

NegociacoesService:

obterNegociacoesDaSemana() {

        return new Promise((resolve, reject) => {

            this.http.get('/negociacoes/semana').then((result) => {

                resolve(result.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)));

            }).catch((err) => {
                reject(this._mensagem.texto = err);
            });
        })
    }

    obterNegociacoesDaSemanaAnterior() {

        return new Promise((resolve, reject) => {

            this.http.get('/negociacoes/anterior').then((result) => {

                resolve(result.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)));

            }).catch((err) => {
                reject(this._mensagem.texto = err);
            });
        })
    }

    obterNegociacoesDaSemanaRetrasada() {

        return new Promise((resolve, reject) => {

            this.http.get('/negociacoes/retrasada').then((result) => {

                resolve(result.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)));

            }).catch((err) => {
                reject(this._mensagem.texto = err);
            });

        })
    }
1 resposta

Fala ai Roberto, tudo bem? Estranho, era para respeitar a ordem, será que a API não está mandando em ordem aleatória?

Compartilhe o projeto completo comigo, assim eu consigo subir ele por aqui, simular o problema e analisar com mais calma.

Pode compartilhar através do Github ou Google Drive (zipado).

Fico no aguardo.