Angular2 Http 双订阅
Angular2 Http double subscribe
是否可以调用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)
}
}
您可以return 新的 Observable 包装器。这样的事情应该有效:
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 请求。
此答案与此相似。
是否可以调用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)
}
}
您可以return 新的 Observable 包装器。这样的事情应该有效:
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 请求。
此答案与此相似