对可观察的zip订阅执行操作

时间:2018-09-12 09:55:33

标签: angular rxjs rxjs6

我在Angular 6中具有以下两个功能:

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

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

现在,我想使用zip订阅这两个Observable,并在完成两者后执行一项操作:

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

在此示例中,控制台中未打印3,仅打印了12。我需要打印其中三个,如何实现?

2 个答案:

答案 0 :(得分:2)

您必须从这些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));

答案 1 :(得分:0)

您将http1和http2包装到一个数组中。这不是zip的工作方式。您必须这样做:

currency = models.CharField(null=False, blank=True, default='£')

信息: 另请参阅:https://www.learnrxjs.io/operators/combination/zip.html