Foi resolvido de maneira mais simples e em menos linhas. Gostaria de saber se é uma má prática a forma como fiz.
O código das requisições/promises
class NegociacaoServices{
constructor(){
this._requisicao = ["semana", "anterior", "retrasada"]
this._epoca = ["semana", "anterior", "retrasada"]
}
obterNegociacaoSemana(){
return NegociacaoServices.criaPromise(this._requisicao[0], this._epoca[0])
}
obterNegociacaoPassada(){
return NegociacaoServices.criaPromise(this._requisicao[1], this._epoca[1])
}
obterNegociacaoRetrasada(){
return NegociacaoServices.criaPromise(this._requisicao[2], this._epoca[2])
}
static criaPromise(requisicao, epoca){
return new Promise((resolve, reject) =>{
let mensagem = new Mensagem()
let xhr = new XMLHttpRequest()
xhr.open("GET", `negociacoes/${requisicao}`)
xhr.onreadystatechange = () =>{
if(xhr.readyState == 4){
if(xhr.status == 200){
resolve(
JSON.parse(xhr.responseText)
.map(objt => new Negociacao(
new Date(objt.data),
objt.quantidade,
objt.valor)
)
)
}
else{
console.log(xhr.responseText)
reject(`Não foi possível importar negociacoes da ${epoca}`)
}
}
}
xhr.send()
})
}
}
Meu Controller:
importaNegociacoes(){
let service = new NegociacaoServices()
Promise.all([service.obterNegociacaoSemana(),
service.obterNegociacaoPassada(),
service.obterNegociacaoRetrasada()])
.catch(
erro => this._mensagem.texto = erro)
.then(
negociacao=>
negociacao.reduce(
(reduzida, atual)=> reduzida.concat(atual),[])
.forEach(n => this._listaNegociacoes.adiciona(n),
this._mensagem.texto="Negociações importadas com sucesso")
)
}
Ele funciona perfeitamente, mas gostaria de saber se isso é uma má prática, por favor.
Abraços e muito obrigado por cada aula.