我想将多个http请求分叉到一个可观察量中,按间隔调用它并在所有订阅者之间共享相同的数据。
到目前为止,我的代码如下所示:
import {Observable} from "rxjs/Rx";
let obs = Observable
.interval(10000)
.publish()
.connect()
.forkJoin(
this.http.get(API_URL + "x", {headers: this.headers})
.map(response => response.json()),
this.http.get(API_URL + "y", {headers: this.headers})
.map(response => response.json())
)
.map(res => {
// do some stuff
return res;
});
错误:
Typescript Error
Property 'forkJoin' does not exist on type 'Subscription'.
我读过:
https://blog.thoughtram.io/angular/2016/06/16/cold-vs-hot-observables.html
Ionic2 中的多个$http请求
http://restlet.com/blog/2016/04/12/interacting-efficiently-with-a-restful-service-with-angular2-and-rxjs-part-2/
谢谢!
这样的事情应该可以工作:
let source = Observable
.interval(1000)
.flatMap(() => {
return Rx.Observable.forkJoin(
this.http.get(API_URL + "x", {headers: this.headers})
.map(response => response.json()),
this.http.get(API_URL + "y", {headers: this.headers})
.map(response => response.json())
)
})
.publish();
source.connect();
然后观察者订阅这个可观察量
source.subscribe(...);
我在这里所做的是采用可观察的间隔,并将每个值替换为所有操作的 forkJoin。然后发布它以将相同的数据共享给多个订阅。
您在实现中遇到的另一个问题是您从.connect()
返回订阅,这只是为了在需要时处置它(取消订阅)。观察者应订阅已发布的源。