forked from MapComplete/MapComplete
Fix await which causes hanging map in fallback mode
This commit is contained in:
parent
c300d90128
commit
497fa4ccdf
1 changed files with 45 additions and 45 deletions
|
@ -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<void> {
|
||||
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<void> {
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue