对 Observable zip 订阅执行操作

Perform an action on Observable zip subscription

我在Angular6中有以下两个函数:

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。我需要打印三个,怎么实现?

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

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

信息: 另见:https://www.learnrxjs.io/operators/combination/zip.html

您必须 return 来自那些 http 请求的 Observable 数据,而不是 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));