Documentação
Conceitos
async fn

async fn

💡

Você deve habilitar o recurso async ou tokio_rt no napi para usar async fn:

Cargo.toml
[dependencies]
napi = { version = "2", features = ["async"] }

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.

NAPI-RS suporta o runtime do tokio por padrão. Se você await um future do tokio em uma async fn, NAPI-RS o executará no runtime do tokio e o converterá em uma Promise do JavaScript.

lib.rs
use futures::prelude::*;
use napi::bindgen_prelude::*;
use tokio::fs;
 
#[napi]
async fn read_file_async(path: String) -> Result<Buffer> {
  fs::read(path)
    .map(|r| match r {
      Ok(content) => Ok(content.into()),
      Err(e) => Err(Error::new(
        Status::GenericFailure,
        format!("failed to read file, {}", e),
      )),
    })
    .await
}

⬇️ ⬇️ ⬇️ ⬇️ ⬇️ ⬇️ ⬇️ ⬇️ ⬇️

index.d.ts
export function readFileAsync(path: string): Promise<Buffer>