@@ -658,6 +658,8 @@ module App = {
658658 let urlTimerId : ref <option <int >> = ref (None )
659659 let toastTimerId : ref <option <int >> = ref (None )
660660 let firstCompilerLoad = ref (true )
661+ let compilerLoadSequence = ref (0 )
662+ let compileSequence = ref (0 )
661663 let shareToast : Signal .t <option <string >> = Signal .make (None )
662664
663665 let syncEditorState = event => {
@@ -685,6 +687,9 @@ module App = {
685687 }
686688
687689 let compileNow = () => {
690+ compileSequence := compileSequence .contents + 1
691+ let sequence = compileSequence .contents
692+
688693 let run = async () => {
689694 switch Signal .peek (status ) {
690695 | Loading => ()
@@ -693,11 +698,19 @@ module App = {
693698 Signal .set (status , Compiling )
694699 try {
695700 let result = await CompilerApi .compile (Signal .peek (source ), currentConfig ())
696- Signal .set (compileResult , Some (result ))
697- Signal .set (status , Ready )
701+ if sequence === compileSequence .contents {
702+ Signal .set (compileResult , Some (result ))
703+ Signal .set (status , Ready )
704+ }
698705 } catch {
699- | JsExn (obj ) => Signal .set (status , Failed (Browser .jsErrorMessage (obj )))
700- | _ => Signal .set (status , Failed ("Compilation failed" ))
706+ | JsExn (obj ) =>
707+ if sequence === compileSequence .contents {
708+ Signal .set (status , Failed (Browser .jsErrorMessage (obj )))
709+ }
710+ | _ =>
711+ if sequence === compileSequence .contents {
712+ Signal .set (status , Failed ("Compilation failed" ))
713+ }
701714 }
702715 }
703716 }
@@ -768,35 +781,47 @@ module App = {
768781 }
769782
770783 let loadCompiler = (version , compileAfterLoad ) => {
784+ compilerLoadSequence := compilerLoadSequence .contents + 1
785+ compileSequence := compileSequence .contents + 1
786+ let sequence = compilerLoadSequence .contents
787+
771788 let load = async () => {
772789 try {
773790 Signal .set (status , Loading )
774791 Signal .set (compileResult , None )
775792 let info = await CompilerApi .init (version )
776- let useInitialSettings = firstCompilerLoad .contents
777- firstCompilerLoad := false
778- Signal .set (compilerInfo , Some (info ))
779- Signal .set (compilerVersion , info .bundleId )
780- Signal .set (moduleSystem , useInitialSettings ? initialModuleSystem : info .moduleSystem )
781- Signal .set (warnFlags , useInitialSettings ? initialWarnFlags : info .warnFlags )
782- Signal .set (
783- jsxPreserveMode ,
784- useInitialSettings ? initialJsxPreserveMode : info .jsxPreserveMode ,
785- )
786- Signal .set (
787- experimentalFeatures ,
788- useInitialSettings ? initialExperimentalFeatures : info .experimentalFeatures ,
789- )
790- Signal .set (status , Ready )
791- if ! useInitialSettings {
792- scheduleUrlSync ()
793- }
794- if compileAfterLoad {
795- compileNow ()
793+ if sequence === compilerLoadSequence .contents {
794+ let useInitialSettings = firstCompilerLoad .contents
795+ firstCompilerLoad := false
796+ Signal .set (compilerInfo , Some (info ))
797+ Signal .set (compilerVersion , info .bundleId )
798+ Signal .set (moduleSystem , useInitialSettings ? initialModuleSystem : info .moduleSystem )
799+ Signal .set (warnFlags , useInitialSettings ? initialWarnFlags : info .warnFlags )
800+ Signal .set (
801+ jsxPreserveMode ,
802+ useInitialSettings ? initialJsxPreserveMode : info .jsxPreserveMode ,
803+ )
804+ Signal .set (
805+ experimentalFeatures ,
806+ useInitialSettings ? initialExperimentalFeatures : info .experimentalFeatures ,
807+ )
808+ Signal .set (status , Ready )
809+ if ! useInitialSettings {
810+ scheduleUrlSync ()
811+ }
812+ if compileAfterLoad {
813+ compileNow ()
814+ }
796815 }
797816 } catch {
798- | JsExn (obj ) => Signal .set (status , Failed (Browser .jsErrorMessage (obj )))
799- | _ => Signal .set (status , Failed ("Compiler failed to load" ))
817+ | JsExn (obj ) =>
818+ if sequence === compilerLoadSequence .contents {
819+ Signal .set (status , Failed (Browser .jsErrorMessage (obj )))
820+ }
821+ | _ =>
822+ if sequence === compilerLoadSequence .contents {
823+ Signal .set (status , Failed ("Compiler failed to load" ))
824+ }
800825 }
801826 }
802827
0 commit comments