Skip to content

Commit 31b5b99

Browse files
committed
Use Promise.allSettled on queries to multiple overlapping extents to
wait until all results are in before merging into popup interface. Extend waiting period to 1s when re-ordering extents via layer control, so that browser processing can finish.
1 parent 1e89c54 commit 31b5b99

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

src/mapml/handlers/QueryHandler.js

+18-11
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,13 @@ export var QueryHandler = L.Handler.extend({
8282
);
8383
let templates = layer.getQueryTemplates(pcrsClick);
8484

85-
var fetchFeatures = function (template, obj, lastOne) {
85+
let fetches = [];
86+
87+
var fetchFeatures = function (template, obj) {
8688
const parser = new DOMParser();
87-
fetch(L.Util.template(template.template, obj), { redirect: 'follow' })
89+
return fetch(L.Util.template(template.template, obj), {
90+
redirect: 'follow'
91+
})
8892
.then((response) => {
8993
if (response.status >= 200 && response.status < 300) {
9094
return response.text().then((text) => {
@@ -137,13 +141,7 @@ export var QueryHandler = L.Handler.extend({
137141
.querySelector('map-feature');
138142
layer._mapmlFeatures.push(feature);
139143
}
140-
if (lastOne) {
141-
// create connection between queried <map-feature> and its parent <map-extent>
142-
for (let feature of layer._mapmlFeatures) {
143-
feature._extentEl = template._extentEl;
144-
}
145-
displayFeaturesPopup(layer._mapmlFeatures, e.latlng);
146-
}
144+
return layer._mapmlFeatures;
147145
})
148146
.catch((err) => {
149147
console.log('Looks like there was a problem. Status: ' + err.message);
@@ -247,10 +245,19 @@ export var QueryHandler = L.Handler.extend({
247245
}
248246

249247
if (template.extentBounds.contains(pcrsClick)) {
250-
let lastOne = i === templates.length - 1 ? true : false;
251-
fetchFeatures(template, obj, lastOne);
248+
fetches.push(fetchFeatures(template, obj));
252249
}
253250
}
251+
Promise.allSettled(fetches).then(() => {
252+
// create connection between queried <map-feature> and its parent <map-extent>
253+
if (layer._mapmlFeatures) {
254+
for (let feature of layer._mapmlFeatures) {
255+
feature._extentEl = template._extentEl;
256+
}
257+
displayFeaturesPopup(layer._mapmlFeatures, e.latlng);
258+
}
259+
});
260+
254261
function displayFeaturesPopup(features, loc) {
255262
if (features.length === 0) return;
256263
let f = M.featureLayer(features, {

test/e2e/layers/multipleHeterogeneousQueryExtents.test.js

+2
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ test.describe('Multiple Extent Queries with heterogeneous response content types
9292
(span) => span.innerText.toLowerCase()
9393
);
9494
expect(thirdExtentInLayerControl).toEqual('html query response');
95+
96+
await page.waitForTimeout(1000);
9597

9698
await page.click('div');
9799
await page.waitForSelector(

0 commit comments

Comments
 (0)