Browse Source

fix signals in futures

Evan Almloff 1 năm trước cách đây
mục cha
commit
b3fbbba711
2 tập tin đã thay đổi với 12 bổ sung6 xóa
  1. 6 6
      examples/clock.rs
  2. 6 0
      packages/core/src/scheduler/wait.rs

+ 6 - 6
examples/clock.rs

@@ -33,12 +33,12 @@ struct ChildProps {
 fn Child(cx: Scope<ChildProps>) -> Element {
     let count = cx.props.count;
 
-    // use_future!(cx, || async move {
-    //     loop {
-    //         tokio::time::sleep(std::time::Duration::from_secs(count.value())).await;
-    //         *count.write() += 1;
-    //     }
-    // });
+    use_future!(cx, || async move {
+        loop {
+            tokio::time::sleep(std::time::Duration::from_secs(count.value())).await;
+            *count.write() += 1;
+        }
+    });
 
     render! {
         div {

+ 6 - 0
packages/core/src/scheduler/wait.rs

@@ -17,6 +17,9 @@ impl VirtualDom {
 
         let mut cx = Context::from_waker(&task.waker);
 
+        // update the scope stack
+        self.runtime.scope_stack.borrow_mut().push(task.scope);
+
         // If the task completes...
         if task.task.borrow_mut().as_mut().poll(&mut cx).is_ready() {
             // Remove it from the scope so we dont try to double drop it when the scope dropes
@@ -26,5 +29,8 @@ impl VirtualDom {
             // Remove it from the scheduler
             tasks.try_remove(id.0);
         }
+
+        // Remove the scope from the stack
+        self.runtime.scope_stack.borrow_mut().pop();
     }
 }