diff --git a/packages/core/src/virtual_dom.rs b/packages/core/src/virtual_dom.rs index 2b1de0767..333fef513 100644 --- a/packages/core/src/virtual_dom.rs +++ b/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![]; + tasks.retain(|_, task| task.as_mut().poll(cx).is_pending()); - // 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); - } - - // 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, } });