在将数据从 nodejs 传递到 rust 时使用 neon 执行异步任务
performing an async task using neon while passing data from nodejs to rust
我想使用 neon 执行从 nodejs 到 rust 的异步任务。
我想用一些数据从 nodejs 调用一个函数 performAsyncTask(data, (err, result) => {})
并在 rust 完成任务后取回结果。
我查看了在他们的 github 上使用 neon 的基本异步示例:https://github.com/neon-bindings/examples/blob/main/async/native/src/lib.rs
不幸的是,我似乎无法弄清楚如何从 perform 方法访问数据
在后台任务中。
如果我通过这种方式获取从nodejs传入的参数
let arg0 = cx.argument::<JsValue>(0)?;
,如何在 BackgroundTask 的执行方法中访问它?
感谢您的帮助!
谢谢!
由于这是异步执行的,因此在 perform_async_task() 返回之前结果不可用。在 javascript 中,您通常会向函数传递一个回调,然后在结果可用时调用该函数。 Neon 通过 .schedule() 方法为此提供了一个特定的快捷方式。
fn schedule(self, callback: Handle<'_, JsFunction>)
传递给 .schedule() 的回调将在任务完成后调用。有一个示例显示了这一点:https://github.com/neon-bindings/examples/blob/e7b5e3c4ed35f6c5d84895c2f7e7b06389989b6f/fibonacci-async-task/native/src/lib.rs
该示例同时显示了同步和异步实现。异步实现的关键部分是第 44 行,它获取从 JS 传入的回调参数,以及第 47 行将回调传递给 .schedule() 函数
43: let n = cx.argument::<JsNumber>(0)?.value() as usize;
44: let cb = cx.argument::<JsFunction>(1)?;
45:
46: let task = FibonacciTask { argument: n };
47: task.schedule(cb);
根据任务实现中 .complete() 返回的值,其余的应该由 neon 自己处理
我想使用 neon 执行从 nodejs 到 rust 的异步任务。
我想用一些数据从 nodejs 调用一个函数 performAsyncTask(data, (err, result) => {})
并在 rust 完成任务后取回结果。
我查看了在他们的 github 上使用 neon 的基本异步示例:https://github.com/neon-bindings/examples/blob/main/async/native/src/lib.rs
不幸的是,我似乎无法弄清楚如何从 perform 方法访问数据 在后台任务中。
如果我通过这种方式获取从nodejs传入的参数
let arg0 = cx.argument::<JsValue>(0)?;
,如何在 BackgroundTask 的执行方法中访问它?
感谢您的帮助!
谢谢!
由于这是异步执行的,因此在 perform_async_task() 返回之前结果不可用。在 javascript 中,您通常会向函数传递一个回调,然后在结果可用时调用该函数。 Neon 通过 .schedule() 方法为此提供了一个特定的快捷方式。
fn schedule(self, callback: Handle<'_, JsFunction>)
传递给 .schedule() 的回调将在任务完成后调用。有一个示例显示了这一点:https://github.com/neon-bindings/examples/blob/e7b5e3c4ed35f6c5d84895c2f7e7b06389989b6f/fibonacci-async-task/native/src/lib.rs
该示例同时显示了同步和异步实现。异步实现的关键部分是第 44 行,它获取从 JS 传入的回调参数,以及第 47 行将回调传递给 .schedule() 函数
43: let n = cx.argument::<JsNumber>(0)?.value() as usize;
44: let cb = cx.argument::<JsFunction>(1)?;
45:
46: let task = FibonacciTask { argument: n };
47: task.schedule(cb);
根据任务实现中 .complete() 返回的值,其余的应该由 neon 自己处理