4
respostas

Método Importa Negociações Promisse.All

Foi passado essa importação dessa forma .

Negociação Controller

importaNegociacoes(){
 Promise.all([
                    service.obterNegociacoesDaSemana(),
                    service.obterNegociacoesDaSemanaAnterior(),
                    service.obterNegociacoesDaSemanaRetrasada()]
                       ).then(negociacoes => {
                           negociacoes
                           .reduce((arrayAchatado,array) => arrayAchatado.concat(array),[])
                           .forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));
                              this._mensagem.texto = 'Negociacoes importadas com sucesso';                    
                       })
                       .catch(erro => this._mensagem.texto = erro);
}

Mas quando estamos fazendo uma melhor divisão do código só consigo se importar 1 lista apenas como faço para importar as 3 da aula em NegociacaoService?

 importa(listaAtual){

        return  this.obterNegociacoesDaSemana()
                    .then(negociacoes =>
                            negociacoes.filter(negociacao =>
                            !listaAtual.some(negociacaoExistente =>
                                    JSON.stringify(negociacao) == JSON.stringify(negociacaoExistente)))
                        )
                    .catch(erro => {
                                    throw new Error('Não foi possivel buscar negociações para importar');
                                })
         }
4 respostas

Fala ai Paulo, tudo bem? Desculpa mas eu não entendi a dúvida.

Consegue me passar mais detalhes do problema?

Espero ter ajudado.

Oi Matheus tudo bem sim obrigado por responder, no caso aqui estou usando uma função que faz a leitura de 3 arrays e use todos, usando promise all e reduce para fazer um for simplificiado.

importaNegociacoes(){
 Promise.all([
                    service.obterNegociacoesDaSemana(),
                    service.obterNegociacoesDaSemanaAnterior(),
                    service.obterNegociacoesDaSemanaRetrasada()]
                       ).then(negociacoes => {
                           negociacoes
                           .reduce((arrayAchatado,array) => arrayAchatado.concat(array),[])
                           .forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));
                              this._mensagem.texto = 'Negociacoes importadas com sucesso';                    
                       })
                       .catch(erro => this._mensagem.texto = erro);
}

Eu não estou conseguindo fazer a leitura dos arrays da mesma forma nessa, só consigo ler de 1 ao inves de 3.

importa(listaAtual){

        return  this.obterNegociacoesDaSemana()
                    .then(negociacoes =>
                            negociacoes.filter(negociacao =>
                            !listaAtual.some(negociacaoExistente =>
                                    JSON.stringify(negociacao) == JSON.stringify(negociacaoExistente)))
                        )
                    .catch(erro => {
                                    throw new Error('Não foi possivel buscar negociações para importar');
                                })
         }

Gostaria de saber como posso ler mais de um array na segunda estrutura, é isso.Porque no curso de JavaScript avançado não aparece essa transição.

Só passando para falar que resolvi eu uno todas as negociações em um unico método , usando o Promise all.

  obterNegociacoesDaSemana(){
    return new Promise((resolve,reject) => {
        this._http
        .get('negociacoes/semana')
        .then(negociacoes =>
            {
                resolve(negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade,objeto.valor)));
            })
            .catch(erro =>{
                console.log(erro);
                reject('Não foi possivel obter a negociacao da semana.');
            })

         });
      }

        obterNegociacoesDaSemanaAnterior(){

            return new Promise((resolve,reject) => {
                this._http
                .get('negociacoes/anterior')
                .then(negociacoes =>
                    {
                        resolve(negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade,objeto.valor)));
                    })
                    .catch(erro =>{
                        console.log(erro);
                        reject('Não foi possivel obter a negociacao da semana anterior.');
                    })

                 });                  
        }

        obterNegociacoesDaSemanaRetrasada(){

            return new Promise((resolve,reject) => {
                this._http
                .get('negociacoes/retrasada')
                .then(negociacoes =>
                    {
                        resolve(negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade,objeto.valor)));
                    })
                    .catch(erro =>{
                        console.log(erro);
                        reject('Não foi possivel obter a negociacao da semana retrasada.');
                    })

                 });  

    }


    obterNegociacoes(){

            return  Promise.all([
                                this.obterNegociacoesDaSemana(),
                                this.obterNegociacoesDaSemanaAnterior(),
                                this.obterNegociacoesDaSemanaRetrasada()
                            ]).then(periodos => {

                                let  negociacoes = periodos
                                    .reduce((dados,periodo) => dados.concat(periodo),[])
                                    .map(dado => new Negociacao(new Date(dado.data), dado.quantidade, dado.valor));
                                return negociacoes;
                            }).catch(erro => {
                                throw new Error(erro);
                            });
    }

Abraços

Fala Paulo, fico feliz que tenha resolvido o problema, parabéns.

Sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.