Как проверить, достигли ли несколько подписок onComplete ()? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть две подписки в компоненте Angular 6.Теперь я хочу запустить метод, как только эти две подписки достигнут onComplete.

Как я могу сделать это самым простым способом?

Ответы [ 4 ]

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

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

const stream1$ = of (1,2,3);
    const stream2$ = of (4,5,6);
    const result$ = merge(stream1$, stream2$);
    result$.subscribe(
// value
      (val) => {console.log(val) },
// error
    (err) => { console.log(err) },
//on complete
    ()=>{console.log('completed') });
0 голосов
/ 13 сентября 2018

Вы можете использовать forkJoin , чтобы дождаться обоих, как только оба будут выполнены, а затем вы подпишитесь на него, как вы это обычно делаете с наблюдаемым.

Вот так

import { Component } from '@angular/core';
import { forkJoin, Observable } from 'rxjs'

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular';

 constructor(){
   forkJoin([this.observableTest(2000), this.observableTest(3000)])
   .subscribe(data => {
     this.runMeAfter(data)
   })
 }

  runMeAfter(data){
    alert('yeahhh done with data, check your console for data')
    console.log(data)
  }

  observableTest(delay){
    return Observable.create(observer => {
      setTimeout(() => {
        observer.next("data to send can be object or anything");
        console.log("am done");
        observer.complete(); // to show we are done with our processing 
      }, delay);
    })
  }
}

runMeAfter будет вызван, как только оба асинхронных кода будут выполнены с обработкой.

Демонстрация Stackblitz: https://stackblitz.com/edit/angular-forkjoin-theo

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

forkJoin работает, когда все обозреватели испускают одно значение. Похоже на обещание. Все.

Если обозреватели будут излучать более одного значения. Вы можете использовать ОбъединитьЛатест , который выдает значение каждый раз, когда все обозреватели испускают одно значение.

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

Используйте forkJoin . Он испустит, как только все данные Наблюдения завершены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...