所以基本上我有一个函数,每当我从signalR收到一个新数据时,就会向服务器发出2个HTTP请求,这些数据将被多次激活。所以getitemCount
函数会被调用很多次。因此,它也会多次击中服务器。
getitemCount
是承诺的,因为我使用toPromise()
运算符将其从Observable转换。
我要做的是:当从服务器接收更新时,如果有getitemCount
正在进行中。它将被取消并改为提出新请求。
export class LeftNavigationComponent implements OnInit, OnDestroy {
typeACount: number = 0;
typeBCount: number = 0;
constructor(
private itemService: service.ItemService,
private signalR: service.SignalRService) { }
ngOnInit(): void {
this.subscriptions = [
this.signalR.itemCreated.subscribe(item => this.onUpdatingData()),
this.signalR.itemUpdated.subscribe(item => this.onUpdatingData()),
this.signalR.itemDeleted.subscribe(itemId => this.onUpdatingData())]
}
onUpdatingData() {
Promise.all([
this.itemService.getitemCount(APP_SETTING.TYPE_A),
this.itemService.getitemCount(APP_SETTING.TYPE_B)])
.then(response => this.gettingCountDone(response))
}
gettingCountDone(response) {
this.typeACount = <any>response[0];
this.typeBCount = <any>response[1];
}
}
我之前使用switchMap来实现搜索,但仍然无法将其存档在当前用例中。
任何人都可以给我一个建议。到目前为止我所做的是使用Observable而不是Promise并使用folkJoin来组合结果。但它的行为与我目前的行为相同。
onUpdatingData() {
Rx.Observable.forkJoin(this.itemService.getitemCount(APP_SETTING.TYPE_A), this.itemService.getitemCount(APP_SETTING.TYPE_B), (r1, r2) => {
})
}
答案 0 :(得分:2)
我只是尝试localy并且是取消订阅完成它的工作
if else (age < 18 || answer == 'N')
我看到该请求在chrome
中被取消