浏览代码

core: cleanup tasks polling fn

Yin Jifeng 3 年之前
父节点
当前提交
7576426c93
共有 1 个文件被更改,包括 4 次插入21 次删除
  1. 4 21
      packages/core/src/virtual_dom.rs

+ 4 - 21
packages/core/src/virtual_dom.rs

@@ -337,29 +337,12 @@ impl VirtualDom {
 
                     let scopes = &mut self.scopes;
                     let task_poll = poll_fn(|cx| {
-                        //
-                        let mut any_pending = false;
-
                         let mut tasks = scopes.tasks.tasks.borrow_mut();
-                        let mut to_remove = vec![];
-
-                        // this would be better served by retain
-                        for (id, task) in tasks.iter_mut() {
-                            if task.as_mut().poll(cx).is_ready() {
-                                to_remove.push(*id);
-                            } else {
-                                any_pending = true;
-                            }
-                        }
-
-                        for id in to_remove {
-                            tasks.remove(&id);
-                        }
+                        tasks.retain(|_, task| task.as_mut().poll(cx).is_pending());
 
-                        // Resolve the future if any singular task is ready
-                        match any_pending {
-                            true => Poll::Pending,
-                            false => Poll::Ready(()),
+                        match tasks.is_empty() {
+                            true => Poll::Ready(()),
+                            false => Poll::Pending,
                         }
                     });