@@ -8,10 +8,10 @@ use bdk_wallet::{
88} ;
99use wasm_bindgen:: {
1010 prelude:: { wasm_bindgen, Closure } ,
11- JsCast , JsError , JsValue ,
11+ JsCast , JsValue ,
1212} ;
1313use wasm_bindgen_futures:: JsFuture ;
14- use web_sys:: js_sys:: { global , Function , Promise , Reflect } ;
14+ use web_sys:: js_sys:: { Function , Promise } ;
1515
1616use crate :: {
1717 result:: JsResult ,
@@ -28,7 +28,7 @@ use bdk_esplora::esplora_client::Sleeper;
2828
2929#[ wasm_bindgen]
3030pub struct EsploraClient {
31- client : AsyncClient < WasmSleeper > ,
31+ client : AsyncClient < WebSleeper > ,
3232}
3333
3434#[ wasm_bindgen]
@@ -37,7 +37,7 @@ impl EsploraClient {
3737 pub fn new ( url : & str , max_retries : usize ) -> JsResult < EsploraClient > {
3838 let client = Builder :: new ( url)
3939 . max_retries ( max_retries)
40- . build_async_with_sleeper :: < WasmSleeper > ( ) ?;
40+ . build_async_with_sleeper :: < WebSleeper > ( ) ?;
4141 Ok ( EsploraClient { client } )
4242 }
4343
@@ -74,9 +74,9 @@ impl EsploraClient {
7474 }
7575}
7676
77- struct WasmSleep ( JsFuture ) ;
77+ struct WebSleep ( JsFuture ) ;
7878
79- impl Future for WasmSleep {
79+ impl Future for WebSleep {
8080 type Output = ( ) ;
8181 fn poll ( self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < ( ) > {
8282 // delegate to the inner JsFuture
@@ -85,28 +85,23 @@ impl Future for WasmSleep {
8585}
8686
8787// SAFETY: Wasm is single-threaded; the value is never accessed concurrently.
88- unsafe impl Send for WasmSleep { }
88+ unsafe impl Send for WebSleep { }
8989
9090#[ derive( Clone , Copy ) ]
91- struct WasmSleeper ;
91+ struct WebSleeper ;
9292
93- impl Sleeper for WasmSleeper {
94- type Sleep = WasmSleep ;
93+ impl Sleeper for WebSleeper {
94+ type Sleep = WebSleep ;
9595
9696 fn sleep ( dur : Duration ) -> Self :: Sleep {
97- let ms = dur. as_millis ( ) ;
97+ let ms = dur. as_millis ( ) as i32 ;
9898 let promise = Promise :: new ( & mut |resolve, _reject| {
99- let cb = Closure :: once_into_js ( move || resolve. call0 ( & JsValue :: NULL ) . unwrap ( ) ) . unchecked_into :: < Function > ( ) ;
100-
101- // globalThis.setTimeout(cb, ms);
102- let g = global ( ) ;
103- let set_timeout = Reflect :: get ( & g, & JsValue :: from_str ( "setTimeout" ) )
104- . unwrap_or_else ( |_| JsError :: new ( "setTimeout not found" ) . into ( ) )
105- . unchecked_into :: < Function > ( ) ;
106-
107- set_timeout. call2 ( & g, & cb, & JsValue :: from_f64 ( ms as f64 ) ) . unwrap ( ) ;
99+ let cb = Closure :: once_into_js ( move || resolve. call0 ( & JsValue :: NULL ) . unwrap ( ) ) ;
100+ web_sys:: window ( )
101+ . unwrap ( )
102+ . set_timeout_with_callback_and_timeout_and_arguments_0 ( cb. unchecked_ref :: < Function > ( ) , ms)
103+ . unwrap ( ) ;
108104 } ) ;
109-
110- WasmSleep ( JsFuture :: from ( promise) )
105+ WebSleep ( JsFuture :: from ( promise) )
111106 }
112107}
0 commit comments