我在Angular中使用异步过程遇到了麻烦。 这是一个正在调用其他异步函数的函数:
this.upuvService.updateValorAtualAllUserProducts()
.then(() => {
console.log('After')
this.upService.getUserProductsPromise()
.then(userProducts => userProducts.forEach(userProduct => {
this.carteira.valorTotal += (userProduct.data()['valor_atual']) ? userProduct.data()['valor_atual'] : 0
this.carteira.valorCompra += userProduct.data()['valor']
}))
.then(() => {
this.carteira.rentabilidade = this.rService.calculaRendimento(this.carteira.valorCompra, this.carteira.valorTotal)
})
})
这是我服务的一部分:
updateValorRFixaPosfixados = async() => {
let promisses = []
this.upService.getUserProductsPromiseByFilter('product.id', '==', 'BX3gWHEQIRKUdF7LHZtn').then(rfs => {
rfs.forEach(rf => { promisses.push(this.updateValorRFixaPosfixado(rf))});
return Promise.all(promisses)
})
}
updateValorRFixaPosfixado = async(rf) => {
let qt_dias = this.usefulService.getDaysBetweenDates(rf.data().data_inicio, this.usefulService.getYesterdayDate())
let taxa_anual = rf.data().taxa / 100
let taxa_diaria = this.rfService.calculaTaxaFixaDiaria(taxa_anual)
let indexador_acumulado = await this.rfService.getIndexadorAcumulado(rf.data().indexador.replace('%', '').replace('+', '').toLowerCase(), rf.data().data_inicio, this.usefulService.getYesterdayDate())
let indexador_medio_diario = this.rfService.calculaTaxaFixaDiaria(indexador_acumulado / 100, qt_dias)
let taxa_diaria_total = (rf.data().indexador.includes('%')) ? (indexador_medio_diario * taxa_anual) : (taxa_diaria + indexador_medio_diario)
let taxa_total_acumulada = this.rfService.calculaTaxaFixaAcumulada(taxa_diaria_total, qt_dias)
console.log('Before')
return rf.ref.update({'valor_atual': rf.data().valor * (1 + taxa_total_acumulada)})
}
updateValorAtualAllUserProducts = async () => {
return Promise.all([
this.updateValorAcoes(),
this.updateValorTitulos(),
this.updateValorRFixaPrefixados(),
this.updateValorRFixaPosfixados()
])
}
为什么console.log('Before')在console.log('After')之后执行?我认为它应该等待执行then()语句中的内容。
我该如何解决?