Browse Source

fix async event handler (pass parent view into new task)

Falko Schindler 2 years ago
parent
commit
da987f143d
1 changed files with 5 additions and 2 deletions
  1. 5 2
      nicegui/events.py

+ 5 - 2
nicegui/events.py

@@ -233,10 +233,13 @@ def handle_event(handler: Optional[Callable], arguments: EventArguments) -> Opti
         with globals.within_view(arguments.sender.parent_view):
         with globals.within_view(arguments.sender.parent_view):
             result = handler() if no_arguments else handler(arguments)
             result = handler() if no_arguments else handler(arguments)
         if is_coroutine(handler):
         if is_coroutine(handler):
+            async def wait_for_result():
+                with globals.within_view(arguments.sender.parent_view):
+                    await result
             if globals.loop and globals.loop.is_running():
             if globals.loop and globals.loop.is_running():
-                create_task(result, name=str(handler))
+                create_task(wait_for_result(), name=str(handler))
             else:
             else:
-                on_startup(None, result)
+                on_startup(None, wait_for_result())
         return False
         return False
     except Exception:
     except Exception:
         traceback.print_exc()
         traceback.print_exc()