我在用rxjs
in my angular
应用程序。当多个数据时,我并不总是按照我想要的顺序取回数据REST
已拨打电话。
控制器:
constructor() {
rx.Observable.fromPromise(this.getExpenses(toDate, fromDate))).subscribe(res => {
that.setExpenses(res);
});
}
getExpenses(toDate, fromDate) {
return this.expenseService.getExpenses(fromDate, toDate);
}
updateDate() {
rx.Observable.fromPromise(this.getExpenses(toDate, fromDate))).subscribe(res => {
that.setExpenses(res);
});
}
Service:
getExpenses: function(fromDate, toDateloadExtendedData) {
return Restangular.all('expenses').getList({fromDate: fromDate, toDate: toDate});
},
In my constructor
,我想获取当年的结果,但有时用户会更新调用前的日期constructor
返回。然后我有一个竞争条件,因为用户想要updateDate
信息,而不是constructor
信息。如何取回最近请求的数据?
既然你没有做任何事情来“链接”这两个序列,RxJs 如何知道它们是相关的?
您需要创建一个流,然后您可以使用switch https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/switch.md仅观察最近的请求:
constructor() {
this._requests = new Rx.Subject();
// listen to requests
this._requests.switch().subscribe(res => this.setExpenses(res));
// start the first request
this._requests.onNext(this.getExpenses(toDate, fromDate));
}
updateDate() {
// start a new request
this._requests.onNext(this.getExpenses(toDate, fromDate));
}
请注意,这实际上不会cancel之前的请求。它只会忽略它们产生的任何结果。如果你真的想cancel他们,您的费用服务需要提供一个 API 来取消正在进行的请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)