diff --git a/src/index.tsx b/src/index.tsx index fda11dc66a..8583c0ea40 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -32,7 +32,7 @@ function configureMonacoEnvironment() { }; } -async function bootstrap() { +(async () => { configureMonacoEnvironment(); const services = await createServices(); @@ -49,6 +49,4 @@ async function bootstrap() { ); -} - -bootstrap(); +})(); \ No newline at end of file diff --git a/src/services/navigation.service.ts b/src/services/navigation.service.ts index b1729143fd..6d945f6f8a 100644 --- a/src/services/navigation.service.ts +++ b/src/services/navigation.service.ts @@ -4,12 +4,13 @@ import type React from 'react'; export class NavigationService extends AbstractService { override afterAppInit() { - try { - this.scrollToHash(); - window.dispatchEvent(new HashChangeEvent('hashchange')); - } catch (err: any) { - console.error(err); - } + this.scrollToHash() + .then(() => { + window.dispatchEvent(new HashChangeEvent('hashchange')); + }) + .catch((err) => { + console.log(err); + }); } getUrlParameters() { @@ -30,10 +31,10 @@ export class NavigationService extends AbstractService { try { const range = this.svcs.parserSvc.getRangeForJsonPath('asyncapi', jsonPointer); if (range) { - this.scrollToEditorLine(range.start.line + 1); + await this.scrollToEditorLine(range.start.line + 1); } - this.scrollToHash(hash); + await this.scrollToHash(hash); this.emitHashChangeEvent(hash); } catch (e) { console.error(e); diff --git a/src/services/parser.service.ts b/src/services/parser.service.ts index 36fb6f7024..296dcec03c 100644 --- a/src/services/parser.service.ts +++ b/src/services/parser.service.ts @@ -28,8 +28,8 @@ export class ParserService extends AbstractService { }); this.subscribeToFiles(); - this.subscribeToSettings(); - this.parseSavedDocuments(); + await this.subscribeToSettings(); + await this.parseSavedDocuments(); } async parse(uri: string, spec: string, options: ParseOptions = {}): Promise { @@ -137,25 +137,25 @@ export class ParserService extends AbstractService { } private subscribeToFiles() { - filesState.subscribe((state, prevState) => { + filesState.subscribe(async (state, prevState) => { const newFiles = state.files; const oldFiles = prevState.files; - Object.entries(newFiles).forEach(([uri, file]) => { + Object.entries(newFiles).forEach(([uri, file]) => async () => { const oldFile = oldFiles[String(uri)]; if (file === oldFile) return; - this.parse(uri, file.content, { source: file.source }); + await this.parse(uri, file.content, { source: file.source }); }); }); } - private subscribeToSettings() { - settingsState.subscribe((state, prevState) => { + private async subscribeToSettings() { + settingsState.subscribe((state, prevState) => async () => { if (isDeepEqual(state.governance, prevState.governance)) return; const { files } = filesState.getState(); - Object.entries(files).forEach(([uri, file]) => { - this.parse(uri, file.content); + Object.entries(files).forEach(async ([uri, file]) => { + await this.parse(uri, file.content); }); }); } diff --git a/src/studio.tsx b/src/studio.tsx index b37089136c..19089ef60b 100644 --- a/src/studio.tsx +++ b/src/studio.tsx @@ -12,8 +12,8 @@ export const AsyncAPIStudio: React.FunctionComponent = () = const services = useServices(); useEffect(() => { - setTimeout(() => { - afterAppInit(services); + setTimeout(async () => { + await afterAppInit(services); }, 250); }, []);