extern crate futures;
extern crate js_sys;
extern crate wasm_bindgen;
extern crate wasm_bindgen_futures;
use futures::{Async, Future, Poll};
use wasm_bindgen::prelude::*;
use wasm_bindgen_futures::JsFuture;
pub struct NextTick {
inner: JsFuture,
}
impl NextTick {
pub fn new() -> NextTick {
let promise = js_sys::Promise::resolve(&JsValue::NULL);
let inner = JsFuture::from(promise);
NextTick { inner }
}
}
impl Future for NextTick {
type Item = ();
type Error = ();
fn poll(&mut self) -> Poll<(), ()> {
match self.inner.poll() {
Ok(Async::Ready(_)) => Ok(Async::Ready(())),
Ok(Async::NotReady) => Ok(Async::NotReady),
Err(_) => unreachable!(
"We only create NextTick with a resolved inner promise, never \
a rejected one, so we can't get an error here"
),
}
}
}