async fn
TIP
Você deve habilitar o recurso async ou tokio_rt no napi para usar async fn:
Cargo.toml
toml
[dependencies]
napi = { version = "3", features = ["async", "tokio_fs"] }
napi-derive = "3"
O exemplo abaixo usa a subfeature tokio_fs. Habilite somente as APIs Tokio
que o addon realmente usa.
Você pode realizar muitos trabalhos async/multi-threaded com AsyncTask e ThreadsafeFunction, mas às vezes você pode querer usar diretamente as crates do ecossistema async do Rust.
Com async ou tokio_rt habilitado, o NAPI-RS fornece um runtime Tokio.
Se você aguardar um future Tokio em uma async fn exportada, o NAPI-RS o
executará nesse runtime e converterá o resultado em uma Promise JavaScript.
lib.rs
rust
use napi::bindgen_prelude::*;
use napi::tokio::fs;
use napi_derive::napi;
#[napi]
pub async fn read_file_async(path: String) -> Result<Buffer> {
let content = fs::read(path).await?;
Ok(content.into())
}
⬇️ ⬇️ ⬇️ ⬇️ ⬇️ ⬇️ ⬇️ ⬇️ ⬇️
index.d.ts
ts
export function readFileAsync(path: string): Promise<Buffer>