从JavaScript编译为Wasm的异步Rust函数时,为什么字符串参数为空?

本杰明

我正在使用用wasm-pack构建的wasm_bindgen。我有一个暴露给JS的Rust函数:

#[wasm_bindgen]
pub async fn validate_registration_token(backend_api_domain: String, token: String) -> Result<JsValue, JsValue> {

    console::log_1(&"backend_api_domain=".clone().into());
    console::log_1(&backend_api_domain.clone().into());
    console::log_1(&"token=".clone().into());
    console::log_1(&backend_api_domain.clone().into());

    let api_endpoint_get_guest_info = format!(
        "{backend_api_domain}/weddings/{token}/guests/registration/{registration_token}",
        backend_api_domain = backend_api_domain.clone(),
        token = token.clone(),
        registration_token = registration_token.clone()
    );

    console::log_1(&api_endpoint_get_guest_info.clone().into());

    let res = reqwest::Client::new()
        .get(&api_endpoint_get_guest_info)
        .send()
        .await
        .unwrap();

    let text = res.text().await.unwrap();

    let promise = js_sys::Promise::resolve(&true.into());
    let result = wasm_bindgen_futures::JsFuture::from(promise).await.unwrap();
    Ok(result)
}

在HTML / JavaScript中,我称为Rust函数:

<button
    type="button"
    class="btn submit"
    onclick="wam.validate_registration_token('http://localhost:80', 'mytoken')">
    Send
</button>

启动应用程序时,单击Send按钮将调用我的Rust函数,但两个String参数似乎都是空白/缺失。

这是上面函数的控制台跟踪:

backend_api_domain=

token=

/weddings//guests/registration/AAAA

我不确定我在做什么错。是否应该更改从JavaScript调用Rust函数的方式?

这是要重现的完整代码示例

本杰明

终于设法解决了这个问题!感谢用户Pauan的帮助,以防锈。我的错误是无法在JS中正确初始化WASM。

await init('./ front_bg.wasm')的返回值是原始WebAssembly导出(通常不应使用),而./front.js模块将这些导出包装起来,以便它们可以正常工作,因此您必须使用./front.js中定义的函数,而不是从init返回的函数

参见https://discordapp.com/channels/442252698964721669/443151097398296587/693385649750933564

将HTML中的脚本标记更改为以下标记:

import init, * as wam from './front.js';
const run = async () => {
    await init('./front_bg.wasm');
    window.wam = wam;
};
run();

谢谢 !

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将JavaScript字符串传递给已编译为WebAssembly的Rust函数

来自分类Dev

当代码为字符串时,将 Javascript ES6 重新编译为 ES5 代码

来自分类Dev

为什么检查字符串是否为空的函数总是返回true?

来自分类Dev

Dart/Flutter:作为参数传递时,列表中的元素字符串变为空(为什么??)

来自分类Dev

SQL Server:为什么参数为零时FORMAT返回空字符串?

来自分类Dev

使用wasm-pack构建时在Rust和JavaScript之间传递字符串

来自分类Dev

C字符串函数参数返回时为NULL

来自分类Dev

为什么 JavaScript 在使用对象作为键时隐式字符串化参数值?

来自分类Dev

FromBody字符串参数为空

来自分类Dev

为什么在函数参数中将字符串作为const字符串传递

来自分类Dev

函数参数总是为空为什么?

来自分类Dev

为什么递归异步函数在Rust中需要'静态参数?

来自分类Dev

当我的默认数组为空时,为什么猫鼬用空字符串调用验证器?

来自分类Python

为什么检查另一个字符串是否为空时返回True?

来自分类Dev

从C#到C-DLL调用/封送该结构时,为什么此字符串为空?

来自分类Dev

交叉编译为Musl时,为什么在Docker中不执行Rust文档测试?

来自分类Dev

为什么可空 cursor.getString() 赋值给不可空字符串编译?

来自分类Dev

为什么“字符串”-“字符串”为NaN?

来自分类Dev

创建带有日期对象的日期时,为什么会收到“类型为“日期”的参数不能分配给类型为“字符串|数字”的参数”的信息?

来自分类Dev

Rust宏可以创建编译时字符串吗?

来自分类Dev

为什么我的编译器将字符串理解为const char []?

来自分类Dev

当整数,字符串和数组作为JavaScript中的函数参数传递时,有什么区别

来自分类Dev

在constexpr函数中返回C字符串:为什么编译器没有警告?

来自分类Dev

为什么在Rust中修改字符串变量时指针的地址没有改变?

来自分类Dev

为什么带引号的空数组不是参数,而是带引号的空字符串?

来自分类Dev

为什么“空”或“未定义”“可分配”给类型“字符串”的参数?

来自分类Dev

为什么int和字符串的串联在编译时不会抱怨

来自分类Dev

React:为什么在 onClick 事件中调用函数时参数为空?

来自分类Dev

流:为什么抱怨字符串为空/未定义?

Related 相关文章

  1. 1

    将JavaScript字符串传递给已编译为WebAssembly的Rust函数

  2. 2

    当代码为字符串时,将 Javascript ES6 重新编译为 ES5 代码

  3. 3

    为什么检查字符串是否为空的函数总是返回true?

  4. 4

    Dart/Flutter:作为参数传递时,列表中的元素字符串变为空(为什么??)

  5. 5

    SQL Server:为什么参数为零时FORMAT返回空字符串?

  6. 6

    使用wasm-pack构建时在Rust和JavaScript之间传递字符串

  7. 7

    C字符串函数参数返回时为NULL

  8. 8

    为什么 JavaScript 在使用对象作为键时隐式字符串化参数值?

  9. 9

    FromBody字符串参数为空

  10. 10

    为什么在函数参数中将字符串作为const字符串传递

  11. 11

    函数参数总是为空为什么?

  12. 12

    为什么递归异步函数在Rust中需要'静态参数?

  13. 13

    当我的默认数组为空时,为什么猫鼬用空字符串调用验证器?

  14. 14

    为什么检查另一个字符串是否为空时返回True?

  15. 15

    从C#到C-DLL调用/封送该结构时,为什么此字符串为空?

  16. 16

    交叉编译为Musl时,为什么在Docker中不执行Rust文档测试?

  17. 17

    为什么可空 cursor.getString() 赋值给不可空字符串编译?

  18. 18

    为什么“字符串”-“字符串”为NaN?

  19. 19

    创建带有日期对象的日期时,为什么会收到“类型为“日期”的参数不能分配给类型为“字符串|数字”的参数”的信息?

  20. 20

    Rust宏可以创建编译时字符串吗?

  21. 21

    为什么我的编译器将字符串理解为const char []?

  22. 22

    当整数,字符串和数组作为JavaScript中的函数参数传递时,有什么区别

  23. 23

    在constexpr函数中返回C字符串:为什么编译器没有警告?

  24. 24

    为什么在Rust中修改字符串变量时指针的地址没有改变?

  25. 25

    为什么带引号的空数组不是参数,而是带引号的空字符串?

  26. 26

    为什么“空”或“未定义”“可分配”给类型“字符串”的参数?

  27. 27

    为什么int和字符串的串联在编译时不会抱怨

  28. 28

    React:为什么在 onClick 事件中调用函数时参数为空?

  29. 29

    流:为什么抱怨字符串为空/未定义?

热门标签

归档