从网络工作者获取“prompt()”输入并从函数返回它?

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

我正在使用 pyodide 库,并且遇到了一个问题,我需要为 stdin 添加一个处理程序,但是我在网络工作人员中运行 pyodide 并且我无权访问

window 
或任何类型的
prompt

pyodide.setStdin({ stdin: () => { 
    // code here
}})

我尝试使用

postMessage()
函数向页面请求输入并将其发回,但由于我从函数返回此内容,因此在必须返回之前我无法接收输入。我还尝试使用
SharedArrayBuffer
Atomics
来冻结网络工作人员直到页面响应,但我无法找到解决方案,但我认为这是一个很好的起点。到目前为止,我看到的大多数解决方案只是重组代码,但由于 pyodide 是一个外部库,我被迫从我在
pyodide.setStdin

中设置的函数返回
javascript web-worker pyodide
1个回答
0
投票

我找到了如何解决这个问题,所以我想我应该发布它。我最终确实将

SharedArrayBuffer
Atomics
一起使用。 Andrea Giammarchi 有一篇关于在线程之间传递字符串的精彩文章, 但基本上我会通过
postMessage
将缓冲区传递到主线程,询问字符串的长度,然后使用
Atomics.wait
暂停,直到工作人员收到长度。然后,我将使用它来创建另一个缓冲区并像以前一样传递它,但将字符串编码到缓冲区中并从工作人员中解码它。随附的 Medium 文章比我解释得更好。

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