feat: abstract to rc wake

This commit is contained in:
Jonathan Kelley committed 2022-11-06 14:28:41 -08:00
1 parent a38fc9e4ab
commit e6c53803a6
12 files changed
+188 -67

No files matched your search

+18 -4
View File
@@ -8,7 +8,7 @@ use crate::{
bump_frame::BumpFrame,
factory::RenderReturn,
scopes::{ScopeId, ScopeState},
virtualdom::VirtualDom,
virtualdom::VirtualDom, innerlude::SuspenseLeaf,
};
impl VirtualDom {
@@ -68,11 +68,25 @@ impl VirtualDom {
let res = match &mut new_nodes {
RenderReturn::Sync(_) => new_nodes,
RenderReturn::Async(fut) => {
use futures_util::FutureExt;
let mut cx = Context::from_waker(&noop_waker_ref());
// use futures_util::FutureExt;
let leaves = self.scheduler.handle.leaves.borrow_mut();
leaves.insert(Rc::new(SuspenseLeaf {
id: todo!(),
scope: todo!(),
boundary: todo!(),
tx: todo!(),
task: todo!(),
}));
let waker = crate::scheduler::make_suspense_waker(task);
match fut.poll_unpin(&mut cx) {
std::task::Poll::Ready(nodes) => RenderReturn::Sync(nodes),
std::task::Poll::Ready(nodes) => {
leaves.remove(key;)
RenderReturn::Sync(nodes)
},
std::task::Poll::Pending => new_nodes,
}
}