【发布时间】:2017-02-25 18:11:04
【问题描述】:
我希望订阅一个 observable 并在其上使用一些方法来确保它被去抖动并且之前的请求被取消
private _allBulls = new BehaviorSubject<Sire[]>([]);
allBulls$ = this._allBulls.asObservable();
private apiChange = new Subject<ApiChange>();
apiChange$ = this.apiChange.asObservable().distinctUntilChanged().debounceTime(1000);
我已经到了这里,我可以订阅我的组件,然后从组件中调用这个方法
this.subscription = this.selectionService.apiChange$.subscribe(
(data) => {
this.selectionService.getSireData(data);
})
getSireData 方法
getSireData(apiChange: ApiChange) {
console.log("getSireData")
this.updateApiSettings(apiChange);
const headers = new Headers({'Content-Type': 'application/json'})
options = new RequestOptions({ headers: headers});
this.http
.post(`${this.baseUrl}SireSearch/Scope/Filtered`, this.apiSettings, options)
.map(this.extractData)
.subscribe(data => this._allBulls.next(data))
}
另一个组件中的订阅以使更改反映可观察对象
this.selectionService.allBulls$.subscribe(() => this.selectionService.applyGridSettings());
但是,我不能使用 .switch 或 .switchMap 运算符,因为它需要返回的 observable。所以我想我需要想出一个不同的结构。我也更愿意简单地订阅 apiChange$ 而不是从订阅中调用服务方法。
【问题讨论】: