pub struct JsPromise(/* private fields */);
Expand description
The type of JavaScript
Promise
objects.
JsPromise
instances may be constructed with Context::promise
, which
produces both a promise and a Deferred
, which can be used to control
the behavior of the promise. A Deferred
struct is similar to the resolve
and reject
functions produced by JavaScript’s standard
Promise
constructor:
let deferred;
let promise = new Promise((resolve, reject) => {
deferred = { resolve, reject };
});
§Example
fn resolve_promise(mut cx: FunctionContext) -> JsResult<JsPromise> {
let (deferred, promise) = cx.promise();
let msg = cx.string("Hello, World!");
deferred.resolve(&mut cx, msg);
Ok(promise)
}
§Example: Asynchronous task
This example uses the linkify crate in an asynchronous task, i.e. a Node worker pool thread, to find all the links in a text string.
Alternate implementations might use a custom Rust thread or thread pool to avoid
blocking the worker pool; for more information, see the JsFuture
example.
use linkify::{LinkFinder, LinkKind};
use easy_cast::Cast; // for safe numerical conversions
fn linkify(mut cx: FunctionContext) -> JsResult<JsPromise> {
let text = cx.argument::<JsString>(0)?.value(&mut cx);
let promise = cx
.task(move || {
let (indices, kinds): (Vec<_>, Vec<_>) = LinkFinder::new()
// The spans() method fully partitions the text
// into a sequence of contiguous spans, some of which
// are plain text and some of which are links.
.spans(&text)
.map(|span| {
// The first span starts at 0 and the rest start
// at their preceding span's end index.
let end: u32 = span.end().cast();
let kind: u8 = match span.kind() {
Some(LinkKind::Url) => 1,
Some(LinkKind::Email) => 2,
_ => 0,
};
(end, kind)
})
.unzip();
(indices, kinds)
})
.promise(|mut cx, (indices, kinds)| {
let indices = JsUint32Array::from_slice(&mut cx, &indices)?;
let kinds = JsUint8Array::from_slice(&mut cx, &kinds)?;
Ok(cx.empty_object()
.prop(&mut cx, "indices")
.set(indices)?
.prop("kinds")
.set(kinds)?
.this())
});
Ok(promise)
}
Implementations§
Source§impl JsPromise
impl JsPromise
Sourcepub fn resolve<'a, C: Context<'a>, T: Value>(
cx: &mut C,
value: Handle<'_, T>,
) -> Handle<'a, Self>
pub fn resolve<'a, C: Context<'a>, T: Value>( cx: &mut C, value: Handle<'_, T>, ) -> Handle<'a, Self>
Creates a new Promise
immediately resolved with the given value. If the value is a
Promise
or a then-able, it will be flattened.
JsPromise::resolve
is useful to ensure a value that might not be a Promise
or
might not be a native promise is converted to a Promise
before use.
Sourcepub fn reject<'a, C: Context<'a>, E: Value>(
cx: &mut C,
err: Handle<'_, E>,
) -> Handle<'a, Self>
pub fn reject<'a, C: Context<'a>, E: Value>( cx: &mut C, err: Handle<'_, E>, ) -> Handle<'a, Self>
Creates a nwe Promise
immediately rejected with the given error.
Sourcepub fn to_future<'a, O, C, F>(
&self,
cx: &mut C,
f: F,
) -> NeonResult<JsFuture<O>>
Available on crate features napi-5
and futures
only.
pub fn to_future<'a, O, C, F>( &self, cx: &mut C, f: F, ) -> NeonResult<JsFuture<O>>
napi-5
and futures
only.Creates a Future
that can be awaited to receive the result of a
JavaScript Promise
.
A callback must be provided that maps a Result
representing the resolution or rejection of
the Promise
and returns a value as the Future
output.
Note: Unlike Future
, Promise
are eagerly evaluated and so are JsFuture
.
Trait Implementations§
Source§impl Object for JsPromise
impl Object for JsPromise
Source§fn prop<'a, 'cx: 'a, K: PropertyKey>(
&self,
cx: &'a mut Cx<'cx>,
key: K,
) -> PropOptions<'a, 'cx, Self, K>
fn prop<'a, 'cx: 'a, K: PropertyKey>( &self, cx: &'a mut Cx<'cx>, key: K, ) -> PropOptions<'a, 'cx, Self, K>
PropOptions
for accessing a property. Read moreSource§fn method<'a, 'cx: 'a, K: PropertyKey>(
&self,
cx: &'a mut Cx<'cx>,
key: K,
) -> NeonResult<BindOptions<'a, 'cx>>
fn method<'a, 'cx: 'a, K: PropertyKey>( &self, cx: &'a mut Cx<'cx>, key: K, ) -> NeonResult<BindOptions<'a, 'cx>>
this
to the object. Read moreSource§fn get_opt<'a, V: Value, C: Context<'a>, K: PropertyKey>(
&self,
cx: &mut C,
key: K,
) -> NeonResult<Option<Handle<'a, V>>>
fn get_opt<'a, V: Value, C: Context<'a>, K: PropertyKey>( &self, cx: &mut C, key: K, ) -> NeonResult<Option<Handle<'a, V>>>
Object::prop()
insteadSource§fn get_value<'a, C: Context<'a>, K: PropertyKey>(
&self,
cx: &mut C,
key: K,
) -> NeonResult<Handle<'a, JsValue>>
fn get_value<'a, C: Context<'a>, K: PropertyKey>( &self, cx: &mut C, key: K, ) -> NeonResult<Handle<'a, JsValue>>
Object::prop()
insteadSource§fn get<'a, V: Value, C: Context<'a>, K: PropertyKey>(
&self,
cx: &mut C,
key: K,
) -> NeonResult<Handle<'a, V>>
fn get<'a, V: Value, C: Context<'a>, K: PropertyKey>( &self, cx: &mut C, key: K, ) -> NeonResult<Handle<'a, V>>
Object::prop()
insteadSource§fn get_own_property_names<'a, C: Context<'a>>(
&self,
cx: &mut C,
) -> JsResult<'a, JsArray>
fn get_own_property_names<'a, C: Context<'a>>( &self, cx: &mut C, ) -> JsResult<'a, JsArray>
napi-6
only.fn freeze<'a, C: Context<'a>>(&self, cx: &mut C) -> NeonResult<&Self>
fn seal<'a, C: Context<'a>>(&self, cx: &mut C) -> NeonResult<&Self>
Source§fn set<'a, C: Context<'a>, K: PropertyKey, W: Value>(
&self,
cx: &mut C,
key: K,
val: Handle<'_, W>,
) -> NeonResult<bool>
fn set<'a, C: Context<'a>, K: PropertyKey, W: Value>( &self, cx: &mut C, key: K, val: Handle<'_, W>, ) -> NeonResult<bool>
Object::prop()
insteadfn root<'a, C: Context<'a>>(&self, cx: &mut C) -> Root<Self>
Source§fn call_method_with<'a, C, K>(
&self,
cx: &mut C,
method: K,
) -> NeonResult<CallOptions<'a>>where
C: Context<'a>,
K: PropertyKey,
fn call_method_with<'a, C, K>(
&self,
cx: &mut C,
method: K,
) -> NeonResult<CallOptions<'a>>where
C: Context<'a>,
K: PropertyKey,
Object::method()
insteadSource§impl Value for JsPromise
impl Value for JsPromise
Auto Trait Implementations§
impl Freeze for JsPromise
impl RefUnwindSafe for JsPromise
impl !Send for JsPromise
impl !Sync for JsPromise
impl Unpin for JsPromise
impl UnwindSafe for JsPromise
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more