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