首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在WASI中使用Rust的async/await语法

如何在WASI中使用Rust的async/await语法
EN

Stack Overflow用户
提问于 2021-03-11 07:49:48
回答 1查看 522关注 0票数 4

我想用cargo-wasi编译以下代码。

代码语言:javascript
复制
// reqwest = { version = "0.11", features = ["json"] }
// tokio = { version = "1", features = ["full"] }

use std::collections::HashMap;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let resp = reqwest::get("https://httpbin.org/ip")
        .await?
        .json::<HashMap<String, String>>()
        .await?;
    println!("{:#?}", resp);
    Ok(())
}

在尝试编译它之后,我得到了以下错误,因为mio doesn't currently support WASI

代码语言:javascript
复制
$ cargo wasi run
   Compiling mio v0.7.9
   Compiling parking_lot v0.11.1
   Compiling serde_json v1.0.64
   Compiling idna v0.2.2
error[E0432]: unresolved import `crate::sys::IoSourceState`
  --> /home/ducaale/.cargo/registry/src/github.com-1ecc6299db9ec823/mio-0.7.9/src/io_source.rs:12:5
   |
12 | use crate::sys::IoSourceState;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^ no `IoSourceState` in `sys`
... errors omitted

我做了一些研究,到目前为止,我发现的examples都没有使用异步/等待。有没有什么东西可以用来替代tokio,这样我的代码就可以在WASI中编译了?

EN

回答 1

Stack Overflow用户

发布于 2021-03-11 07:59:59

我试着运行它,看起来reqwests crate不能用cargo wasi或wasm-pack正确构建,因为它不能编译mio ( tokio在本地编译时使用它)。在github上有一些提到,reqwests可以与wasm一起使用,但它还没有得到完全的支持,我也找不到太多关于如何让它工作的信息。听起来目前还没有针对WASI上的HTTP请求的解决方案,但是web-sys可以用来通过Node.js或浏览器发出请求。

似乎tokio需要特定的功能标志才能与web程序集一起使用。本期在底部提到了sync和rt标志:https://github.com/tokio-rs/tokio/issues/1597,但为了也使用#tokio:main,您还需要“rt-多线程”和“宏”功能标志。

还可以使用wasm bindgen将未来转换为承诺,但这可能不适用于WASI:https://rustwasm.github.io/wasm-bindgen/api/wasm_bindgen_futures/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66574538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档