From 497fa4ccdf681b1134eb0e6dd4cca24c0000d8d5 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Fri, 23 Feb 2024 11:35:58 +0100 Subject: [PATCH] Fix await which causes hanging map in fallback mode --- .../Sources/OverpassFeatureSource.ts | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts b/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts index 9ff8f74cf9..af8fdbbf9d 100644 --- a/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts +++ b/src/Logic/FeatureSource/Sources/OverpassFeatureSource.ts @@ -1,5 +1,5 @@ import { Feature } from "geojson" -import { FeatureSource, UpdatableFeatureSource } from "../FeatureSource" +import { UpdatableFeatureSource } from "../FeatureSource" import { ImmutableStore, Store, UIEventSource } from "../../UIEventSource" import LayerConfig from "../../../Models/ThemeConfig/LayerConfig" import { Or } from "../../Tags/Or" @@ -59,49 +59,6 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource { }) } - /** - * Creates the 'Overpass'-object for the given layers - * @param interpreterUrl - * @param layersToDownload - * @constructor - * @private - */ - private GetFilter(interpreterUrl: string, layersToDownload: LayerConfig[]): Overpass { - let filters: TagsFilter[] = layersToDownload.map((layer) => layer.source.osmTags) - filters = Utils.NoNull(filters) - if (filters.length === 0) { - return undefined - } - return new Overpass(new Or(filters), [], interpreterUrl, this.state.overpassTimeout) - } - - /** - * - * @private - */ - private async updateAsyncIfNeeded(): Promise { - if (!this._isActive?.data) { - return - } - if (this.runningQuery.data) { - console.log("Still running a query, not updating") - return undefined - } - - if (this.timeout.data > 0) { - console.log("Still in timeout - not updating") - return undefined - } - const requestedBounds = this.state.bounds.data - if ( - this._lastQueryBBox !== undefined && - requestedBounds.isContainedIn(this._lastQueryBBox) - ) { - return undefined - } - await this.updateAsync() - } - /** * Download the relevant data from overpass. Attempt to use a different server; only downloads the relevant layers * @private @@ -166,7 +123,7 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource { return undefined } this.runningQuery.setData(true) - data = await overpass.queryGeoJson(bounds)[0] + data = (await overpass.queryGeoJson(bounds))[0] } catch (e) { self.retries.data++ self.retries.ping() @@ -207,4 +164,47 @@ export default class OverpassFeatureSource implements UpdatableFeatureSource { self.runningQuery.setData(false) } } + + /** + * Creates the 'Overpass'-object for the given layers + * @param interpreterUrl + * @param layersToDownload + * @constructor + * @private + */ + private GetFilter(interpreterUrl: string, layersToDownload: LayerConfig[]): Overpass { + let filters: TagsFilter[] = layersToDownload.map((layer) => layer.source.osmTags) + filters = Utils.NoNull(filters) + if (filters.length === 0) { + return undefined + } + return new Overpass(new Or(filters), [], interpreterUrl, this.state.overpassTimeout) + } + + /** + * + * @private + */ + private async updateAsyncIfNeeded(): Promise { + if (!this._isActive?.data) { + return + } + if (this.runningQuery.data) { + console.log("Still running a query, not updating") + return undefined + } + + if (this.timeout.data > 0) { + console.log("Still in timeout - not updating") + return undefined + } + const requestedBounds = this.state.bounds.data + if ( + this._lastQueryBBox !== undefined && + requestedBounds.isContainedIn(this._lastQueryBBox) + ) { + return undefined + } + await this.updateAsync() + } }