mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Fix requests cancelling (#7457)
* fix backendSrv request cancelling * revert imports * formatting
This commit is contained in:
parent
a36b1d9dce
commit
9e7df648b5
@ -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();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user