在 rust wasm 中使用 blockon

问题描述 投票:0回答:1

我想在编译为 wasm 时在 Rust 中使用 block_on 。 问题是我正在使用 egui 并想将其编译为网络。它的功能是同步的,我需要阻止异步功能。我尝试使用 async_futures,但它似乎开始了未来,但没有阻止它。

#[wasm_bindgen]
pub fn test1() {
    alert("Hello, 1");

    async_std::task::block_on(async {
        alert("Hello, 2");
        async_std::task::sleep(Duration::from_secs(5)).await;
        alert("Hello, 3");
    });

    alert("Hello, 4");
}

输出将按顺序

1, 4, 2, 3

它不会发出任何绑定,我可以用它来检查它是否完成,并且我无法传入互斥体,因为我需要在异步代码之外等待它,这是不可能的。知道如何阻止它吗?

我期待输出

1, 2, 3, 4

rust webassembly wasm-bindgen
1个回答
0
投票

不可能在网络浏览器中运行阻塞代码。

浏览器供应商不允许这样做。与

javascript 中的基本相同。

如果这是可能的,这将是一种在同步 JavaScript 函数中运行异步代码的方法(因为

test1

 将从 JavaScript 中调用),而
是不允许的

这也是

async-std中的一个

开放问题
(请注意,提及pollster
似乎是不正确的,因为当我尝试使用
.await
时,它对
pollster::block_on
ed语句感到恐慌) .

© www.soinside.com 2019 - 2024. All rights reserved.