Единственный успешный обратный вызов с помощью RxJS Observables - PullRequest
0 голосов
/ 22 мая 2018

Как я могу иметь один коллбэк успеха с наблюдаемыми, позволяя каждому наблюдаемому иметь свой собственный блок успеха / ошибки?У меня есть динамический список вызовов AJAX, которые необходимо сделать, и для каждого требуется метод обратного вызова.Я также хотел бы иметь один метод обратного вызова после завершения каждого вызова AJAX.Я пытался использовать zip, но вызовы AJAX вызываются дважды.

Пример:

var possibleRequest1 = Observable.create(() => {}).subscribe(_ => {
    //Must have a success callback
});
var possibleRequest2 = Observable.create(() => {}).subscribe(_ => {
    //Must have a success callback
});
var possibleRequest3 = Observable.create(() => {}).subscribe(_ => {
    //Must have a success callback
});

//User 1 might need to make requests 1 and 2
var dynamicRequstList = [possibleRequest1, possibleRequest2];
//User 2 might need to make all three requests
var dynamicRequstList = [possibleRequest1, possibleRequest2, possibleRequest3];

zip(...dynamicRequestList)
.subscribe(() => {
    //Need a callback after all requests are complete.
});

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать forkJoin из rxjs. Здесь пример того, как использовать forkJoin на примере вашего вопроса.

service.ts

constructor(private http: HttpClient) { }

requestList1$ = new Subject();
requestList2$ = new Subject();

getDynamicRequstList1() {
    forkJoin(
      this.getItems1(),
      this.getItems2()
    ).subscribe(res => this.requestList1$.next(res));
}

getDynamicRequstList2() {
    forkJoin(
      this.getItems1(),
      this.getItems2(),
      this.getItems3()
    ).subscribe(res => this.requestList2$.next(res));
}  

getItems1(): Observable<any> {
    return of({
      item1: 'Item 1'
    });
}  

getItems2(): Observable<any> {
    return of({
      item1: 'Item 2'
    });
  }  

getItems3(): Observable<any> {
    return of({
      item1: 'Item 3'
    });
}

component.ts

constructor(private service: AppService) { }

ngOnInit() {
  this.service.requestList1$.subscribe(res => console.log('RES 1:::', res))
  this.service.requestList2$.subscribe(res => console.log('RES 2:::', res))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...