napi-rs Docs

Tokio

Tokio

Real world example

You can also run Tokio futures in Node.js. With the tokio_rt feature, napi-rs will create tokio runtime so that you can use Env::execute_tokio_future to execute a future and return a JavaScript Promise.

tokio_rt needs ThreadSafeFunction under the hood, so enable tokio_rt feature will enable napi4 by default.

#[js_function(1)]
pub fn readfile(ctx: CallContext) -> Result<JsObject> {
let js_filepath = ctx.get::<JsString>(0)?;
let path_str = js_filepath.into_utf8()?.into_owned()?;
ctx.env.execute_tokio_future(
tokio::fs::read(path_str).map(|v| {
v.map_err(|e| {
Error::new(
Status::GenericFailure,
format!("failed to read file, {}", e),
)
})
}),
|&mut env, data| env.create_buffer_with_data(data).map(|v| v.into_raw()),
)
}
readfile('./test.txt').then((data) => {
console.log(data) // Buffer<00 03 ...>
})
Edit this page on GitHub