Как обновить представление, когда / после использования asyn c ngOnInit? - PullRequest
0 голосов
/ 22 апреля 2020

У меня такая ситуация. Мне нужно позвонить в 4 службы, чтобы получить всю информацию, которая нужна компоненту. Когда этот асин * c контекст разрешается, представление уже построено (у меня нет способа избежать этого прямо сейчас). Как обновить представление после разрешения ngOnInit?

ngOnInit() {
    this.ecsSelecionados = [];
    this.initMCC();
  }

  async initMCC(){

    try {
      this.loading = true;
      const listaEcs = [];
      const descricaoMCC: MccDescricaoPostModel[] = [];

      await this.simuladorGvService.obterDadosGcom().toPromise().then(mccs => {
        this.listaECporMCC = mccs;
        this.listaECporMCC.map(mcc => {
          mcc.ecs.map(ec => {
            listaEcs.push(ec.numeroDoEstabelecimento);
            descricaoMCC.push({numeroEC: ec.numeroDoEstabelecimento, codigoMCC: ec.ramoAtividade});
          });
      });
        return listaEcs;
      }).then(listaEcs => {
          return zip(
            this.simuladorGvService.verificarElegibilidadeEcs(listaEcs),
            this.simuladorGvService.verificarElegibilidadeRREcs(listaEcs),
          ).toPromise();
      }).then(([listaElegibilidade, listaElegibilidadeRR]) => {
        this.listaElegibilidade = listaElegibilidade;
        this.listaElegibilidadeRR = listaElegibilidadeRR;
      }).then(() => {
        const cadeia = new CadeiaMccDescricaoPostModel(descricaoMCC);
        return this.simuladorGvService.obterDescricaoEcs(cadeia).toPromise();
      }).then(listaMCCLabel => {
        this.listaMCCLabel = listaMCCLabel;
      });

    } catch (error) {
      console.log(error);
    } finally {
      this.loading = false;
    } 
  }

, это html

<section class="ui-g-12 ui-md-12 ui-lg-12 ui-sm-12" style="border: 1px solid rgba(170, 170, 170, 1);padding: 0;">

<div class="container">
     <div class="ui-g-12 ui-md-12 ui-lg-12 ui-sm-12">
        <h3>Simulação em Cadeia de MCC</h3>
            <app-tabela-ec-cadeia [listaECporMCC]="listaECporMCC" 
                                  [listaElegibilidadeRR]="listaElegibilidadeRR" 
                                  [listaElegibilidade]="listaElegibilidade" 
                                  [listaMCCLabel]="listaMCCLabel"
                                  (updateListaDeECSelecionado)="onSelect($event)"></app-tabela-ec-cadeia>

    </div>
</div>

1 Ответ

0 голосов
/ 04 мая 2020

На самом деле я забыл некоторые детали при кодировании. Во-первых, управление загрузкой, а также часть конструкции должны немного отличаться. Я не знаю, как это можно сделать с помощью наблюдаемых, но если кто-то знает, что пора поделиться.

Мое решение

async initMCC() {

try {
  this.loading = true;
  const listaEcsMCC = [];
  const descricaoMCC: MccDescricaoPostModel[] = [];

  this.listaECporMCC = await this.simuladorGvService.obterDadosGcom().toPromise();
  if (this.listaECporMCC) {
    this.listaECporMCC.map(mcc => {
      mcc.ecs.map(ec => {
        listaEcsMCC.push(ec.numeroDoEstabelecimento);
        descricaoMCC.push({
          numeroEC: ec.numeroDoEstabelecimento,
          codigoMCC: ec.ramoAtividade
        });
      });
    });

    await Promise.resolve(listaEcsMCC).then(listaEcs => {
      return zip(
        this.simuladorGvService.verificarElegibilidadeEcs(listaEcs),
        this.simuladorGvService.verificarElegibilidadeRREcs(listaEcs),
      ).toPromise();
    }).then(async ([listaElegibilidade, listaElegibilidadeRR]) => {
      this.listaElegibilidade = listaElegibilidade;
      this.listaElegibilidadeRR = listaElegibilidadeRR;
    }).then(() => {
      const cadeia = new CadeiaMccDescricaoPostModel(descricaoMCC);
      return this.simuladorGvService.obterDescricaoEcs(cadeia).toPromise();
    }).then(async listaMCCLabel => {
      this.listaMCCLabel = listaMCCLabel;
    });
  }
} catch (error) {
  console.log(error);
} finally {
  this.loading = false;
}

}

...