50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
|
use super::*;
|
||
|
|
||
|
cfg_if! {
|
||
|
if #[cfg(target_arch = "wasm32")] {
|
||
|
|
||
|
pub fn interval<F, FUT>(freq_ms: u32, callback: F) -> SendPinBoxFuture<()>
|
||
|
where
|
||
|
F: Fn() -> FUT + Send + Sync + 'static,
|
||
|
FUT: Future<Output = ()> + Send,
|
||
|
{
|
||
|
let e = Eventual::new();
|
||
|
|
||
|
let ie = e.clone();
|
||
|
let jh = spawn(Box::pin(async move {
|
||
|
while timeout(freq_ms, ie.instance_clone(())).await.is_err() {
|
||
|
callback().await;
|
||
|
}
|
||
|
}));
|
||
|
|
||
|
Box::pin(async move {
|
||
|
e.resolve().await;
|
||
|
jh.await;
|
||
|
})
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
|
||
|
pub fn interval<F, FUT>(freq_ms: u32, callback: F) -> SendPinBoxFuture<()>
|
||
|
where
|
||
|
F: Fn() -> FUT + Send + Sync + 'static,
|
||
|
FUT: Future<Output = ()> + Send,
|
||
|
{
|
||
|
let e = Eventual::new();
|
||
|
|
||
|
let ie = e.clone();
|
||
|
let jh = spawn(async move {
|
||
|
while timeout(freq_ms, ie.instance_clone(())).await.is_err() {
|
||
|
callback().await;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
Box::pin(async move {
|
||
|
e.resolve().await;
|
||
|
jh.await;
|
||
|
})
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|