Angular Несколько подписок затем выполняют действия - PullRequest
2 голосов
/ 30 мая 2019

У меня есть функция, которая запрашивает данные у API с помощью подписок. Я пытаюсь переписать его так, чтобы он возвращал логическое значение, когда все вызовы API завершены. Есть ли лучший способ написать это?

Мой текущий код:

public res1=null;
public res2=null;

getData(){
 this.svc.getData1().subscribe(x={this.res1=x;})
 this.svc.getData2().subscribe(x={this.res2=x;})
}

Я думал о попытке создать Observable, который будет прослушивать изменения во вложенных подписках: (не проверенный код!)

getData(): Observable<boolean>{
 this.svc.getData1().subscribe(x=>{
   this.res1=x;
   this.svc.getData2().subscribe(x=>{this.res2=x; 
     return true;
   })
 })
)

}

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Один из способов сделать это - использовать объединение. Комбинирование последних создает значение, когда все наблюдаемые значения имеют одно значение.

combineLatest(observeable1$, observable2$).subscribe(
  // when both have submitted a value. return what you like.
);

Если ваша наблюдаемая будет разрешена только один раз. Вы также можете использовать forkJoin. Что похоже на обещание. Все

0 голосов
/ 30 мая 2019

вы можете использовать оператор слияния для объединения наблюдаемых и параллельной подписки на них.

 getData(): Observable<boolean>{
    let isCompleted: Observable<boolean>;
    merge(this.svc.getData1(), this.svc.getData2()).subscribe(
      (val) => {console.log(val) },
    (err) => { console.log(err) },
    ()=>{isCompleted = of (true); });
    return isCompleted;
  }
...