RxJs связывают наблюдаемые с подписками - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть форма, которая состоит из блоков, которые извлекаются при вызовах API.

Мне нужно обрабатывать каждый вызов в соответствии с этим конкретным вызовом (я создаю часть formGroup на основе этого вызова).

Я хочу иметь какую-то глобальную наблюдаемую / статусную информацию, которая будет завершена, когда все вызовы будут выполнены и обработаны.

Теперь я делаю это путем создания счетчика BehaviorSubject и включениякаждый запрос я увеличиваю это.Когда этот счетчик достигает некоторого значения, я изменяю loading на false и затем показываю форму.Есть ли лучший способ?

Похоже,

o1.subscribe(() => {... this.counter.next(this.counter.value + 1) });
o2.subscribe(() => {... this.counter.next(this.counter.value + 1) });
o3.subscribe(() => {... this.counter.next(this.counter.value + 1) });

.

this.counter.subscribe(val => if (val === 3) { this.loading = false; }

Я думал о создании of() оболочки и использовании concat() вокругих, но я не думаю, что это правильно.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Пожалуйста, используйте ответвление от RxJs

Демонстрационная ссылка Plunker

 ngOnInit() {
    forkJoin(
      this._myService.makeRequest('Request One', 2000),
      this._myService.makeRequest('Request Two', 1000) 
      this._myService.makeRequest('Request Three', 3000) 
    )
    .subscribe(([res1, res2, res3]) => {
      this.propOne = res1;
      this.propTwo = res2;
      this.propThree = res3;
    });
  }

Ref:

0 голосов
/ 20 февраля 2019

Если порядок не имеет значения, вы можете использовать forkJoin из rxjs, который работает аналогично Promise.all,

 forkJoin([...requests])
   .subscribe(_ => this.loading = false;) 
...