[Pas2js] page reload when server restarted not 100% reliable

Michael Van Canneyt michael at freepascal.org
Tue Sep 23 09:46:30 CEST 2025



On Tue, 23 Sep 2025, Luca Olivetti via Pas2js wrote:

> El 22/9/25 a les 18:44, Luca Olivetti via Pas2js ha escrit:
>> El 22/9/25 a les 18:33, Michael Van Canneyt ha escrit:
>> 
>>>> I'd like the exception to be propagated to the outer code so my 
>>>> try..catch would work.
>>>
>>> Did you try putting the above in the load ?
>>>
>>> window.addEventListener("load", function () {
>>>    if (typeof rtl === 'undefined' || typeof QRCode === 'undefined') {
>>>      console.log('rtl o QRCode no definidos, recargo pagina');
>>>      setTimeout(function() { location.reload(); }, 5000);
>>>    } else {
>>>      try {
>>>        rtl.run();
>>>      } catch(err) {
>>>        console.log('error '+err.message+', recargo pagina');
>>>        setTimeout(function() { location.reload(); }, 5000);
>>>      }
>>>    }
>>> });
>> 
>> Again, I'm not 100% sure but I think I tried everything at the time.
>> In any case in the scenario I described It shouldn't make a difference: 
>> something is showing the exception instead of being propagated to my 
>> try..catch block.
>> 
>
> The "trick" is to catch the exception inside the pas2js application, 
> since TBrowserApplication.OnException doesn't handle the exception, I 
> had to override the ShowException method.
>
> procedure TMyApplication.ShowException(E: Exception);
> Var
>   S : String;
>   T : TTimer;
>
> begin
>   if (E<>nil) then
>     S:=E.ClassName+': '+E.Message
>   else if ExceptObjectJS then
>     S:=TJSObject(ExceptObjectJS).toString;
>   S:='Unhandled exception caught: '+S;
>   Console.Log(s);
>   //ha llegado a inicializar
>   if Assigned(errorScreen) then
>     showErrorScreen(S);
>   T:=TTimer.Create(nil);
>   T.Interval:=5000;
>   T.OnTimer:=@reconnect;
>   T.Enabled:=true;
> end;
>
>
> Now I'll have to decide if I still have to check for rtl === 'undefined'

If rtl is undefined, then there will be no TMyApplication ?

Michael.


More information about the Pas2js mailing list