如何在异步功能中强制等待?

时间:2020-09-28 21:28:20

标签: angular

我在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()语句中的内容。

我该如何解决?

0 个答案:

没有答案