Skip to content

Commit 4f0bc39

Browse files
use flume instead of ResolvableFuture
1 parent 60896f8 commit 4f0bc39

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

src/values.rs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use std::error::Error;
1313
use std::fmt::{Debug, Formatter};
1414
use std::pin::Pin;
1515
use std::sync::{Arc, Weak};
16+
use std::time::Duration;
1617
use string_cache::DefaultAtom;
1718

1819
pub struct CachedJsObjectRef {
@@ -203,12 +204,36 @@ impl CachedJsPromiseRef {
203204
}
204205

205206
pub fn get_promise_result_sync(&self) -> Result<Result<JsValueFacade, JsValueFacade>, JsError> {
206-
block_on(self.get_promise_result())
207+
let rx = self.get_promise_result_receiver();
208+
rx.recv().map_err(|e| JsError::new_string(format!("{e}")))?
209+
}
210+
211+
pub fn get_promise_result_sync_timeout(
212+
&self,
213+
timeout: Option<Duration>,
214+
) -> Result<Result<JsValueFacade, JsValueFacade>, JsError> {
215+
let rx = self.get_promise_result_receiver();
216+
let res = if let Some(timeout) = timeout {
217+
rx.recv_timeout(timeout)
218+
.map_err(|e| JsError::new_string(format!("{e}")))
219+
} else {
220+
rx.recv().map_err(|e| JsError::new_string(format!("{e}")))
221+
};
222+
res?
207223
}
208224

209225
pub async fn get_promise_result(
210226
&self,
211227
) -> Result<Result<JsValueFacade, JsValueFacade>, JsError> {
228+
let rx = self.get_promise_result_receiver();
229+
rx.into_recv_async()
230+
.await
231+
.map_err(|e| JsError::new_string(format!("{e}")))?
232+
}
233+
234+
pub fn get_promise_result_receiver(
235+
&self,
236+
) -> flume::Receiver<Result<Result<JsValueFacade, JsValueFacade>, JsError>> {
212237
let (tx, rx) = flume::bounded(1);
213238

214239
let tx1 = tx.clone();
@@ -264,9 +289,7 @@ impl CachedJsPromiseRef {
264289
}
265290
});
266291

267-
rx.recv_async()
268-
.await
269-
.map_err(|e| JsError::new_string(format!("{e}")))?
292+
rx
270293
}
271294
}
272295

0 commit comments

Comments
 (0)