Skip to content

Commit d99ef98

Browse files
committed
Fix handling of canceled requests
1 parent 71310fb commit d99ef98

File tree

13 files changed

+6466
-5001
lines changed

13 files changed

+6466
-5001
lines changed

dist/layer-manager.esm.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,9 @@ var replace = function replace(originalStr) {
549549
return str;
550550
};
551551

552+
// Symbol to indicate a canceled request
553+
var CANCELED = Symbol('CANCELED');
554+
552555
var fetchTile = function fetchTile(layerModel) {
553556
var layerConfig = layerModel.layerConfig,
554557
params = layerModel.params,
@@ -588,6 +591,12 @@ var fetchTile = function fetchTile(layerModel) {
588591
}
589592

590593
return res.data;
594+
}).catch(function (err) {
595+
// Silently handle canceled requests - return CANCELED symbol instead of rejecting
596+
if (axios.isCancel(err)) {
597+
return CANCELED;
598+
}
599+
throw err;
591600
});
592601

593602
return newLayerRequest;
@@ -627,6 +636,12 @@ var fetchBounds = function fetchBounds(layerModel) {
627636
}
628637

629638
return res.data;
639+
}).catch(function (err) {
640+
// Silently handle canceled requests - return CANCELED symbol instead of rejecting
641+
if (axios.isCancel(err)) {
642+
return CANCELED;
643+
}
644+
throw err;
630645
});
631646

632647
return newBoundsRequest;
@@ -647,6 +662,11 @@ var CartoLayer = function CartoLayer(layerModel) {
647662

648663
return new Promise(function (resolve, reject) {
649664
fetchTile(layerModel).then(function (response) {
665+
// Handle canceled requests - don't process further
666+
if (response === CANCELED) {
667+
return; // Promise will stay pending, which is fine for canceled requests
668+
}
669+
650670
var tileUrl = 'https://' + response.cdn_url.https + '/ra/api/v1/map/' + response.layergroupid + '/{z}/{x}/{y}.png';
651671
var layer = L.tileLayer(tileUrl);
652672

@@ -679,6 +699,11 @@ CartoLayer.getBounds = function (layerModel) {
679699

680700
return new Promise(function (resolve, reject) {
681701
fetchBounds(layerModel).then(function (response) {
702+
// Handle canceled requests - don't process further
703+
if (response === CANCELED) {
704+
return; // Promise will stay pending, which is fine for canceled requests
705+
}
706+
682707
var _response$rows$ = response.rows[0],
683708
maxy = _response$rows$.maxy,
684709
maxx = _response$rows$.maxx,
@@ -889,6 +914,9 @@ var CanvasLayer = L$1 && L$1.GridLayer.extend({
889914
}
890915
});
891916

917+
// Symbol to indicate a canceled request
918+
var CANCELED$1 = Symbol('CANCELED');
919+
892920
var fetchData = function fetchData(layerModel) {
893921
var layerConfig = layerModel.layerConfig,
894922
layerRequest = layerModel.layerRequest;
@@ -909,6 +937,12 @@ var fetchData = function fetchData(layerModel) {
909937
}
910938

911939
return res.data;
940+
}).catch(function (err) {
941+
// Silently handle canceled requests - return CANCELED symbol instead of rejecting
942+
if (axios.isCancel(err)) {
943+
return CANCELED$1;
944+
}
945+
throw err;
912946
});
913947

914948
return newLayerRequest;
@@ -1567,6 +1601,11 @@ var ClusterLayer = L$2 && L$2.GeoJSON.extend({
15671601
}, clusterConfig));
15681602

15691603
fetchData(layerModel).then(function (response) {
1604+
// Handle canceled requests - don't process further
1605+
if (response === CANCELED$1) {
1606+
return;
1607+
}
1608+
15701609
var features = decodeClusters(response);
15711610
_this.supercluster.load(features);
15721611
_this.update();

dist/layer-manager.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@
149149
return str;
150150
};
151151

152+
// Symbol to indicate a canceled request
153+
var CANCELED = Symbol('CANCELED');
154+
152155
var fetchTile = function fetchTile(layerModel) {
153156
var layerConfig = layerModel.layerConfig,
154157
params = layerModel.params,
@@ -188,6 +191,12 @@
188191
}
189192

190193
return res.data;
194+
}).catch(function (err) {
195+
// Silently handle canceled requests - return CANCELED symbol instead of rejecting
196+
if (axios__default.isCancel(err)) {
197+
return CANCELED;
198+
}
199+
throw err;
191200
});
192201

193202
return newLayerRequest;
@@ -227,6 +236,12 @@
227236
}
228237

229238
return res.data;
239+
}).catch(function (err) {
240+
// Silently handle canceled requests - return CANCELED symbol instead of rejecting
241+
if (axios__default.isCancel(err)) {
242+
return CANCELED;
243+
}
244+
throw err;
230245
});
231246

232247
return newBoundsRequest;
@@ -247,6 +262,11 @@
247262

248263
return new Promise(function (resolve, reject) {
249264
fetchTile(layerModel).then(function (response) {
265+
// Handle canceled requests - don't process further
266+
if (response === CANCELED) {
267+
return; // Promise will stay pending, which is fine for canceled requests
268+
}
269+
250270
var tileUrl = 'https://' + response.cdn_url.https + '/ra/api/v1/map/' + response.layergroupid + '/{z}/{x}/{y}.png';
251271
var layer = L.tileLayer(tileUrl);
252272

@@ -279,6 +299,11 @@
279299

280300
return new Promise(function (resolve, reject) {
281301
fetchBounds(layerModel).then(function (response) {
302+
// Handle canceled requests - don't process further
303+
if (response === CANCELED) {
304+
return; // Promise will stay pending, which is fine for canceled requests
305+
}
306+
282307
var _response$rows$ = response.rows[0],
283308
maxy = _response$rows$.maxy,
284309
maxx = _response$rows$.maxx,
@@ -489,6 +514,9 @@
489514
}
490515
});
491516

517+
// Symbol to indicate a canceled request
518+
var CANCELED$1 = Symbol('CANCELED');
519+
492520
var fetchData = function fetchData(layerModel) {
493521
var layerConfig = layerModel.layerConfig,
494522
layerRequest = layerModel.layerRequest;
@@ -509,6 +537,12 @@
509537
}
510538

511539
return res.data;
540+
}).catch(function (err) {
541+
// Silently handle canceled requests - return CANCELED symbol instead of rejecting
542+
if (axios__default.isCancel(err)) {
543+
return CANCELED$1;
544+
}
545+
throw err;
512546
});
513547

514548
return newLayerRequest;
@@ -1167,6 +1201,11 @@
11671201
}, clusterConfig));
11681202

11691203
fetchData(layerModel).then(function (response) {
1204+
// Handle canceled requests - don't process further
1205+
if (response === CANCELED$1) {
1206+
return;
1207+
}
1208+
11701209
var features = decodeClusters(response);
11711210
_this.supercluster.load(features);
11721211
_this.update();

dist/layer-manager.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/plugins/plugin-leaflet/carto-layer-leaflet.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ var CartoLayer = function CartoLayer(layerModel) {
2323

2424
return new Promise(function (resolve, reject) {
2525
(0, _cartoService.fetchTile)(layerModel).then(function (response) {
26+
// Handle canceled requests - don't process further
27+
if (response === _cartoService.CANCELED) {
28+
return; // Promise will stay pending, which is fine for canceled requests
29+
}
30+
2631
var tileUrl = 'https://' + response.cdn_url.https + '/ra/api/v1/map/' + response.layergroupid + '/{z}/{x}/{y}.png';
2732
var layer = L.tileLayer(tileUrl);
2833

@@ -55,6 +60,11 @@ CartoLayer.getBounds = function (layerModel) {
5560

5661
return new Promise(function (resolve, reject) {
5762
(0, _cartoService.fetchBounds)(layerModel).then(function (response) {
63+
// Handle canceled requests - don't process further
64+
if (response === _cartoService.CANCELED) {
65+
return; // Promise will stay pending, which is fine for canceled requests
66+
}
67+
5868
var _response$rows$ = response.rows[0],
5969
maxy = _response$rows$.maxy,
6070
maxx = _response$rows$.maxx,

lib/plugins/plugin-leaflet/cluster-layer-leaflet.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ var ClusterLayer = L && L.GeoJSON.extend({
111111
}, clusterConfig));
112112

113113
(0, _clusterService.fetchData)(layerModel).then(function (response) {
114+
// Handle canceled requests - don't process further
115+
if (response === _clusterService.CANCELED) {
116+
return;
117+
}
118+
114119
var features = decodeClusters(response);
115120
_this.supercluster.load(features);
116121
_this.update();

lib/services/carto-service.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,21 @@
33
Object.defineProperty(exports, "__esModule", {
44
value: true
55
});
6-
exports.fetchBounds = exports.fetchTile = undefined;
6+
exports.fetchBounds = exports.fetchTile = exports.CANCELED = undefined;
77

88
var _axios = require('axios');
99

10+
var _axios2 = _interopRequireDefault(_axios);
11+
1012
var _request = require('../lib/request');
1113

1214
var _query = require('../utils/query');
1315

16+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17+
18+
// Symbol to indicate a canceled request
19+
var CANCELED = exports.CANCELED = Symbol('CANCELED');
20+
1421
var fetchTile = exports.fetchTile = function fetchTile(layerModel) {
1522
var layerConfig = layerModel.layerConfig,
1623
params = layerModel.params,
@@ -50,6 +57,12 @@ var fetchTile = exports.fetchTile = function fetchTile(layerModel) {
5057
}
5158

5259
return res.data;
60+
}).catch(function (err) {
61+
// Silently handle canceled requests - return CANCELED symbol instead of rejecting
62+
if (_axios2.default.isCancel(err)) {
63+
return CANCELED;
64+
}
65+
throw err;
5366
});
5467

5568
return newLayerRequest;
@@ -89,6 +102,12 @@ var fetchBounds = exports.fetchBounds = function fetchBounds(layerModel) {
89102
}
90103

91104
return res.data;
105+
}).catch(function (err) {
106+
// Silently handle canceled requests - return CANCELED symbol instead of rejecting
107+
if (_axios2.default.isCancel(err)) {
108+
return CANCELED;
109+
}
110+
throw err;
92111
});
93112

94113
return newBoundsRequest;

lib/services/cluster-service.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,19 @@
33
Object.defineProperty(exports, "__esModule", {
44
value: true
55
});
6-
exports.fetchData = undefined;
6+
exports.fetchData = exports.CANCELED = undefined;
77

88
var _axios = require('axios');
99

10+
var _axios2 = _interopRequireDefault(_axios);
11+
1012
var _request = require('../lib/request');
1113

14+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15+
16+
// Symbol to indicate a canceled request
17+
var CANCELED = exports.CANCELED = Symbol('CANCELED');
18+
1219
var fetchData = exports.fetchData = function fetchData(layerModel) {
1320
var layerConfig = layerModel.layerConfig,
1421
layerRequest = layerModel.layerRequest;
@@ -29,6 +36,12 @@ var fetchData = exports.fetchData = function fetchData(layerModel) {
2936
}
3037

3138
return res.data;
39+
}).catch(function (err) {
40+
// Silently handle canceled requests - return CANCELED symbol instead of rejecting
41+
if (_axios2.default.isCancel(err)) {
42+
return CANCELED;
43+
}
44+
throw err;
3245
});
3346

3447
return newLayerRequest;

0 commit comments

Comments
 (0)