Bom dia Senhores, tudo bem?
Quando eu cheguei nesta parte do curso o código do importaNegociacoes() estava um pouco diferente no meu projeto. Estava assim:
importaNegociacoes() {
let service = new NegociacaoService();
service
.obterNegociacoes()
.then(negociacoes =>
negociacoes
.filter(negociacao =>
!this._listaNegociacoes.negociacoes.some(negociacaoExistente =>
JSON.stringify(negociacao) == JSON.stringify(negociacaoExistente)))
)
.then(negociacoes => {
negociacoes
.reduce((arrayAchatado, array) => arrayAchatado.concat(array), [])
.forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));
this._mensagem.texto = "Negociações importadas com sucesso";
}).catch(error => this._mensagem.erro = error);
}
A importação ainda funcionava, mas ainda estava duplicando as importações pois o método .some() falhava no primeiro then porque os métodos do service traziam as negociacoes em 3 arrays (um da semana atual, outro da passada e outro da retrasada) e aí era necessário o uso do método "reduce()" para obtermos o array de forma "achatada".
Entretanto, a solução foi apenas passar o "reduce()" para o primeiro "then()" antes de executar o método "filter()". Segue o código corrigido abaixo:
importaNegociacoes() {
let service = new NegociacaoService();
service
.obterNegociacoes()
.then(negociacoes =>
negociacoes
.reduce((arrayAchatado, array) => arrayAchatado.concat(array), [])
.filter(negociacao =>
!this._listaNegociacoes.negociacoes.some(negociacaoExistente =>
JSON.stringify(negociacao) == JSON.stringify(negociacaoExistente)))
)
.then(negociacoes => {
negociacoes
.forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));
this._mensagem.texto = "Negociações importadas com sucesso";
}).catch(error => this._mensagem.erro = error);
}