Conversation
Jeg tror feilen skyldtes at map.component hentet turer via metadata-egenskapen på GeoJSONService under oppstarten, uten at det ble sjekket om servicen var ferdig med initialisering / lesing fra databasen. I de tilfellene hvor MapComponent leste metadata før GeoJSON var klar, vil i alle fall toggling av og på være eneste fix, og stenge/starte appen igjen ikke nødvendigvis hjelpe, så det stemmer bra med det @gruble opplevde. Denne fiksen sørger for at appen venter med oppstarten til GeoJSONService.init er ferdig.
|
Azure Static Web Apps: Your stage site is ready! Visit it here: https://victorious-water-056410803-953.westeurope.azurestaticapps.net |
There was a problem hiding this comment.
Pull request overview
This PR aims to fix a startup race condition by ensuring GeoJSON metadata is loaded before the rest of the app proceeds, avoiding cases where MapComponent reads GeoJSONService.metadata() before the database read has completed.
Changes:
- Stop auto-initializing
GeoJSONServicein its constructor; exposeinit()for controlled startup sequencing. - Add a global
provideAppInitializerthat callsGeoJSONService.init()during app bootstrap. - Wrap GeoJSON initialization in
try/catchto avoid blocking app startup if metadata loading fails.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| src/app/core/services/geojson/geojson.service.ts | Makes initialization explicit and adds error handling around metadata loading. |
| src/app/app.providers.ts | Adds an app initializer to await GeoJSON initialization during bootstrap. |
| setTimeout(() => (this.initialized = true)); // For å unngå en første unødvendig lagring i effecten | ||
| } catch (error) { | ||
| this.logger.error(error, DEBUG_TAG, 'Init error'); |
There was a problem hiding this comment.
init() only flips initialized to true inside the try block. If getMetadata() throws (e.g., storage corruption), the service remains permanently uninitialized, which means the effect() will keep returning early and metadata changes will never be persisted. Consider setting initialized in a finally (or also in the catch) so the service can continue operating even after an init failure.
| setTimeout(() => (this.initialized = true)); // For å unngå en første unødvendig lagring i effecten | |
| } catch (error) { | |
| this.logger.error(error, DEBUG_TAG, 'Init error'); | |
| } catch (error) { | |
| this.logger.error(error, DEBUG_TAG, 'Init error'); | |
| } finally { | |
| // For å unngå en første unødvendig lagring i effecten | |
| setTimeout(() => { | |
| this.initialized = true; | |
| }); |
There was a problem hiding this comment.
Usikker hva jeg tenker er best her @gruble . Sånn som det er nå vil appen bare lagre ting i minne om init feiler. Hvis vi tillater lagring ved å sette initialized til true i finally eller catch-blokk vil appen kunne overskrive data eller kanskje kræsje andre steder. Hva tenker du?
There was a problem hiding this comment.
Tja. Jeg synes ditt scenario om at appen bare lagrer ting i minnet er ok, selv om jeg helt forstår hvordan den vil gjøre det.
|
Azure Static Web Apps: Your stage site is ready! Visit it here: https://victorious-water-056410803-953.westeurope.azurestaticapps.net |
gruble
left a comment
There was a problem hiding this comment.
Bra du forsøker å løse denne!
Jeg har forsøkt å debugge release/v5.0.15 på tlf. nå. Har gjort en del forsøk på å starte appen på nytt mens jeg debugger, men det virker som den alltid greier å gjøre seg ferdig med initialisering av geojson.service før map.component prøver å kalle geoJSONService.metadata()
Men denne fiksen kan ikke skade!
| setTimeout(() => (this.initialized = true)); // For å unngå en første unødvendig lagring i effecten | ||
| } catch (error) { | ||
| this.logger.error(error, DEBUG_TAG, 'Init error'); |
There was a problem hiding this comment.
Tja. Jeg synes ditt scenario om at appen bare lagrer ting i minnet er ok, selv om jeg helt forstår hvordan den vil gjøre det.
Jeg tror feilen skyldtes at map.component hentet turer via metadata-egenskapen på GeoJSONService under oppstarten, uten at det ble sjekket om servicen var ferdig med initialisering / lesing fra databasen. I de tilfellene hvor MapComponent leste metadata før GeoJSON var klar, vil i alle fall toggling av og på være eneste fix, og stenge/starte appen igjen ikke nødvendigvis hjelpe, så det stemmer bra med det @gruble opplevde.
Denne fiksen sørger for at appen venter med oppstarten til GeoJSONService.init er ferdig.
Merk at jeg ikke har fått feilen selv, så jeg er ikke sikker på om feilen løses av dette.