From 9e7df648b5cc7dfe9812bcef6f368ca617ec6f5b Mon Sep 17 00:00:00 2001 From: jifwin Date: Mon, 6 Feb 2017 06:42:26 +0100 Subject: [PATCH] Fix requests cancelling (#7457) * fix backendSrv request cancelling * revert imports * formatting --- public/app/core/services/backend_srv.ts | 30 +++++++++++++++++-------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/public/app/core/services/backend_srv.ts b/public/app/core/services/backend_srv.ts index 9a5ec5d219b..ba4f4dc2fb9 100644 --- a/public/app/core/services/backend_srv.ts +++ b/public/app/core/services/backend_srv.ts @@ -94,6 +94,21 @@ export class BackendSrv { }); }; + addCanceler(requestId, canceler) { + if (requestId in this.inFlightRequests) { + this.inFlightRequests[requestId].push(canceler); + } else { + this.inFlightRequests[requestId] = [canceler]; + } + } + + resolveCancelerIfExists(requestId) { + var cancelers = this.inFlightRequests[requestId]; + if (!_.isUndefined(cancelers) && cancelers.length) { + cancelers[0].resolve(); + } + } + datasourceRequest(options) { options.retry = options.retry || 0; @@ -101,16 +116,13 @@ export class BackendSrv { // particular query. If the requestID exists, the promise it is keyed to // is canceled, canceling the previous datasource request if it is still // in-flight. - var canceler; - if (options.requestId) { - canceler = this.inFlightRequests[options.requestId]; - if (canceler) { - canceler.resolve(); - } + var requestId = options.requestId; + if (requestId) { + this.resolveCancelerIfExists(requestId); // create new canceler - canceler = this.$q.defer(); + var canceler = this.$q.defer(); options.timeout = canceler.promise; - this.inFlightRequests[options.requestId] = canceler; + this.addCanceler(requestId, canceler); } var requestIsLocal = options.url.indexOf('/') === 0; @@ -158,7 +170,7 @@ export class BackendSrv { }).finally(() => { // clean up if (options.requestId) { - delete this.inFlightRequests[options.requestId]; + this.inFlightRequests[options.requestId].shift(); } }); };