Выполните действие по подписке на наблюдаемый почтовый индекс - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть следующие две функции в Angular 6:

http1() {
    return this.http.post<any>('/url1').subscribe(() => console.log(1));
}

http2() {
    return this.http.post<any>('/url2').subscribe(() => console.log(2));
}

Теперь я хочу подписаться на оба Observables с помощью zip и выполнить действие по завершении обоих:

Observable.zip([http1(), http2()]).subscribe(() => console.log(3));

В этом примере 3 не печатается в консоли, только 1 и 2. Мне нужно напечатать три из них, как этого добиться?

Ответы [ 2 ]

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

Вы должны вернуть Observable данные из этих http запросов вместо subscribing там

http1() {
    return this.http.post<any>('/url1').pipe(tap(val => console.log(1)));
}

http2() {
    return this.http.post<any>('/url2').pipe(tap(val => console.log(1)));
}

И эти observables не должны быть заключены в array, вместо этого они должны быть параметрами.

zip(http1(), http2()).subscribe(() => console.log(3));
0 голосов
/ 12 сентября 2018

Вы завернули http1 и http2 в массив. Это не так, как работает почтовый индекс. Вы должны сделать это:

Observable.zip(http1(), http2()).subscribe(() => console.log(3));

Информация: см. также: https://www.learnrxjs.io/operators/combination/zip.html

...