为什么rxjs没有取消我的承诺
Why is rxjs not canceling my promise?
我在我的angular
应用程序中使用rxjs
。当进行多个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);
});
}
服务:
getExpenses: function(fromDate, toDateloadExtendedData) {
return Restangular.all('expenses').getList({fromDate: fromDate, toDate: toDate});
},
在我的constructor
中,我想获得当前年份的结果,但有时用户会在constructor
返回之前更新调用日期。然后我有一个竞争条件,因为用户想要updateDate
信息,而不是constructor
信息。如何获得最近请求的数据?
既然您没有做任何事情来"链接"这两个序列,那么RxJs如何知道它们是相关的呢?
你需要创建一个单独的流,然后你可以使用switch只观察最近的请求:
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));
}
注意,这实际上不会取消前面的请求。它只会忽略它们产生的任何结果。如果你真的想取消,你的费用服务将需要提供一个API来取消正在进行的请求。
相关文章:
- 我的职位回报太快了,如何做出承诺
- AngularJS-我怎么知道何时解决了对父控制器的承诺
- 我能处理来自gap.client.load'的错误吗;的承诺
- 在我的案例中,如何解决我的承诺问题
- 我只是没有得到 ES6 的“承诺”
- 在我的平均堆栈应用程序中使用承诺
- 使我的异步代码与setTimeout同步.我需要承诺吗
- 为什么我的承诺没有得到解决
- 为什么我的承诺不能在角度js中工作
- 我的承诺是否按预期工作
- 我是否可以假设承诺中的错误会冒泡到新的承诺并抓住它
- 将承诺添加到我的剑道网格的循环中
- 在测试我的AngularJS控制器时,我如何模拟$http.get承诺中的结果
- 为什么我的价值在承诺后没有定义
- 在es6中,我需要我的承诺在完成时返回true或false
- 为什么rxjs没有取消我的承诺
- 为什么我的承诺里面的函数没有运行
- 为什么我的承诺定义被执行
- 为什么我的承诺散列在传递的承诺解决之前就解决了?
- 不能让我的q承诺捕获错误