Angular Http - 如何取消过期请求

时间:2017-08-25 03:25:31

标签: angular angular-http

所以基本上我有一个函数,每当我从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) => {

    })
}

1 个答案:

答案 0 :(得分:2)

我只是尝试localy并且是取消订阅完成它的工作

  if else  (age < 18 || answer == 'N')

我看到该请求在chrome

中被取消