Não estou entendo muito bem o retorno do Promise.all, foi dito que ele retorna uma Promise, mas sendo a combinação das outras. Aí é que entra minha dúvida, se ela é uma promise, qual seria se resolve e seu reject?
Fiquei tentando entender esse retorno, vê se eu entendi certo. O Promise.all vai realizar todos os 3 métodos passados, dando certo, o resolve vai ser o return do then, dando erro, o reject vai ser o new Error que eu lancei no catch. Resumindo, se o método tiver retorno, entra no then, se foi lançado um erro, entra no catch, é isso?
Fiquei com essa dúvida por conta do then e catch no Controller.
Código do Controller:
importarNegociacoes() {
let service = new NegociacaoService();
service.obterNegociacoesPeriodo()
.then(negociacoes => {
negociacoes.forEach(negociacao =>
this._listaNegociacoes.adiciona(negociacao))
this._mensagem.texto = 'Negociações do período importadas com sucesso!'
})
.catch(error => this._mensagem.texto = error);
Código do Service:
class NegociacaoService {
constructor(){
this._http = new HttpService();
}
obterNegociacoesDaSemana() {
return this._obterNegociacoes('negociacoes/semana', 'Não foi possível obter as negociações da semana!');
}
obterNegociacoesDaSemanaAnterior() {
return this._obterNegociacoes('negociacoes/anterior', 'Não foi possível obter as negociações da semana anterior!');
}
obterNegociacoesDaSemanaRetrasada() {
return this._obterNegociacoes('negociacoes/retrasadas', 'Não foi possível obter as negociações da semana retrasada!');
}
_obterNegociacoes(url, erroMsgm) {
return new Promise((resolve, reject) => {
this._http
.get(url)
.then(negociacoes => {
resolve(negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)))
})
.catch(erro => {
console.log(erro);
reject(erroMsgm);
});
});
}
obterNegociacoesPeriodo() {
return Promise.all([this.obterNegociacoesDaSemana(),
this.obterNegociacoesDaSemanaAnterior(),
this.obterNegociacoesDaSemanaRetrasada()])
.then(periodos => {
let negociacoes = periodos
.reduce((arrayAchatado, array) => arrayAchatado.concat(array), []);
return negociacoes;
})
.catch(erro => {
throw new Error(erro);
});
}
}