Как ждать в Angular двух вызовов, чтобы закончить - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть эта функция, которую я хочу запустить.Проблема в том, что он не ждет завершения двух вызовов и создания экземпляров rule1 и rule2, поэтому я получаю сообщение об ошибке rule1.optionhead is undefined.Я пытался разместить код для каждого subscribe, но затем выполнение создания происходило чаще, чем я хочу.Что я могу сделать, чтобы исправить это?

Чтобы уточнить, я использую это для цикла, потому что selectedScenario представляет собой массив идентификаторов, которые находятся в форме ввода ngValue

saveFunction() {

  for (const pair of this.selectedScenario) {
    this.ruleToSave = null;

    this.ruleService.find(pair[0]).subscribe((ruleResponse: HttpResponse < Rule > ) => {
      this.rule1 = ruleResponse.body;

    });

    this.ruleService.find(pair[1]).subscribe((ruleResponse: HttpResponse < Rule > ) => {
      this.rule2 = ruleResponse.body;

    });

    const head1 = this.rule1.optionHead;
    const head2 = this.rule2.optionHead;

    if (
      this.selectedOption === head1 &&
      this.selectedOption !== head2 &&
      (this.selectedWeakerOption === '' || head2 === this.selectedWeakerOption)
    ) {
      ..some code
      this.subscribeToSaveResponse(this.ruleService.createRule(this.ruleToSave));
    }

  }
}

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Попробуйте ForkJoin

  Observable.forkJoin([
                this.ruleService.find(pair[0]),
                this.ruleService.find(pair[1])])
                .subscribe(
    (result: any[]) =>{ 
           this.rule1 = result[0]; 
           this.rule1 = result[1]; 

        ..Your code

    }
    );
0 голосов
/ 22 сентября 2018

Вы должны использовать этот код для этого

removeAll() {
  Promise.all([
    this.storage.remove(key1),
    this.storage.remove(key2),
    this.storage.remove(key3),
  ]).then(value => doSomething());
...