Typescript Angular2 Http双订阅
可以调用Typescript Angular2 Http双订阅,typescript,angular,angular2-http,Typescript,Angular,Angular2 Http,可以调用Subscribe方法两次吗 我正在尝试构建api工厂,它将数据保存在工厂中,但每个ajax调用中的不同组件都可以使用这些数据 工厂 export class api { result = []; constructor (protected http: Http) { } getData () { return this.http.get('./friends.json').map((res: Response) => res
Subscribe
方法两次吗
我正在尝试构建api工厂,它将数据保存在工厂中,但每个ajax调用中的不同组件都可以使用这些数据
工厂
export class api {
result = [];
constructor (protected http: Http) { }
getData ()
{
return this.http.get('./friends.json').map((res: Response) => res.json()).subscribe(res => this.result = res);
}
}
测试组件,它再次调用subscribe
方法
export class TestPage {
showListResult;
constructor (protected api: api) {
this.api.getData().subscribe(res => this.showListResult = res)
}
}
您可以返回新的可观察包装器。像这样的方法应该会奏效:
import {Observable} from 'rxjs/Observable'
export class api {
result = [];
constructor (protected http: Http) { }
getData () {
return new Observable(observer => {
this.http.get('./friends.json')
.map((res: Response) => res.json())
.subscribe(res => {
this.result = res;
observer.next(res);
observer.complete();
});
});
}
}
如果您希望发出一次HTTP请求,并将结果共享给多个订阅者,那么我建议使用可连接的观察者来发布和重播最后发出的值:
this.observable = http.get('...').map(t=> t.json()).publishReplay().refCount();
每个新订户将重播上次发出的值,而不发出新的HTTP请求
此答案与此类似。删除共享部分,然后检查我的答案。使用
新可观察对象和观察者的点。下一步(res)代码>。我发布的示例是它应该是什么样子。确保导入Observable.what'observator.next(res);'和observer.complete()
do?@dfsq这样做的好处是什么,而不仅仅是共享原始的可观测数据?@MarkM在您给出共享答案后,我发布了这个版本(为什么要删除它?它很有用)。感谢您的评论-我删除了答案,因为它显然是错误的。现在我要去挖掘一些我认为工作正常的代码…