对 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
没有在控制台打印,只有1
和2
。我需要打印三个,怎么实现?
您将 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));
我在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
没有在控制台打印,只有1
和2
。我需要打印三个,怎么实现?
您将 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));