diff --git a/src/mono/wasm/runtime/startup.ts b/src/mono/wasm/runtime/startup.ts index 06b43e979f638f..cd022129ef369a 100644 --- a/src/mono/wasm/runtime/startup.ts +++ b/src/mono/wasm/runtime/startup.ts @@ -33,6 +33,7 @@ import { endMeasure, MeasuredBlock, startMeasure } from "./profiler"; let config: MonoConfigInternal = undefined as any; let configLoaded = false; let isCustomStartup = false; +export const dotnetReady = createPromiseController(); export const afterConfigLoaded = createPromiseController(); export const afterInstantiateWasm = createPromiseController(); export const beforePreInit = createPromiseController(); @@ -72,15 +73,19 @@ export function configure_emscripten_startup(module: DotnetModule, exportedAPI: // execution order == [5] == module.postRun = [() => postRunAsync(userpostRun)]; // execution order == [6] == - module.ready = module.ready.then(async () => { + + module.ready.then(async () => { // wait for previous stage await afterPostRun.promise; // startup end endMeasure(mark, MeasuredBlock.emscriptenStartup); // - here we resolve the promise returned by createDotnetRuntime export - return exportedAPI; // - any code after createDotnetRuntime is executed now + dotnetReady.promise_control.resolve(exportedAPI); + }).catch(err => { + dotnetReady.promise_control.reject(err); }); + module.ready = dotnetReady.promise; // execution order == [*] == if (!module.onAbort) { module.onAbort = () => mono_on_abort; @@ -235,6 +240,7 @@ async function postRunAsync(userpostRun: (() => void)[]) { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function abort_startup(reason: any, should_exit: boolean): void { if (runtimeHelpers.diagnosticTracing) console.trace("MONO_WASM: abort_startup"); + dotnetReady.promise_control.reject(reason); afterInstantiateWasm.promise_control.reject(reason); beforePreInit.promise_control.reject(reason); afterPreInit.promise_control.reject(reason);