#js #async

js-function-promisify

一个用于处理 js-sys 函数的库,使其作为 futures 使用

2 个版本

0.2.1 2021 年 5 月 11 日
0.2.0 2021 年 5 月 11 日

WebAssembly 中排名 #1035

每月下载量 43
fut_rwlock 使用

MIT 许可证 MIT

28KB
540 代码行

js-function-promisify

docs

此包提供了与 js_sys::Function 回调一起工作的实用工具,使其在异步 Rust 中的使用方式与 JavaScript 中相同。例如,在 JavaScript 中等待超时完成,可能会编写以下内容:

const promise = new Promise((resolve) => {
  window.setTimeout(() => { resolve('Hello future!'); }, 500);
});
const result = await promise;
result === 'Hello future!'; // true

使用 js-function-promisify 实现相同功能:

let future = Callback::new(|| Ok("Hello future!".into()));
web_sys::window()
  .unwrap()
  .set_timeout_with_callback_and_timeout_and_arguments_0(
    future.as_function().as_ref(),
    500)
  .unwrap();
let result = future.await; // result: Result<JsValue, JsValue>
assert_eq!(result.unwrap().as_string().unwrap(), "Hello future!"); // 🦀

使用方法

待办:记录使用 Callback 的常见方式。待办:记录注意事项,主要是 Closure::once 的使用和在第一次调用时进行分配。

贡献

欢迎贡献!如果您发现错误或有功能请求,请随时提交问题。此外,对公共 API 的反馈也备受欢迎,因为这是我发布的第一个库,我仍在了解 Rust 中的惯用法。

测试

使用 wasm-pack 是运行此存储库中测试的最简单方法。有关其文档,请参阅 此处此处,例如,可以运行以下命令以运行库中的所有测试:

wasm-pack test --headless --firefox

依赖项

~1–1.7MB
~32K SLoC