0
所以基本上我有一個函數,每次從signalR接收到一個新的數據時,就會向服務器發送2個HTTP請求,這個數據會被多次觸發。所以getitemCount
函數將被調用很多次。因此它也會碰到服務器很多次。Angular Http - 如何取消過時的請求
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) => {
})
}
我想退訂應該做的 –
請問它看起來像我分配可觀察到的訂閱變量,然後每次我去onUpdatingData,我檢查如果變量不爲空,並取消訂閱? – trungk18
準確地說,您需要保留所有訂閱。但我再次不確定,因爲我從來沒有這樣做過,只是邏輯上它應該工作 –