如何在 javascript worker 中定义一个 javascript 变量?

How to make a javascript variable defined in javascript worker?

我在 javascript 文件中有这个变量 editorArea.js

var editor = CodeMirror.fromTextArea(document.getElementById('editor'), {});

当我在承诺中从另一个 javascript 工作文件 worker.js 调用此变量时。

myPromise.then(() => {
editor.doFunction()
}

变量example未定义。

如何定义?

Web worker 有一些很大的限制 - 必要的限制,因为 DOM 在设计时从未考虑过线程安全。您不能在主代码中访问全局变量,也不能从 Web Worker 访问 DOM 中的任何内容,并且您会发现在 Web Worker 中尝试任何类似 editor.doFunction() 的操作都行不通。示波器相互密封。相反,您需要通过 postMessage 向工作人员发送消息,并通过 onMessage 每个 javascript web workers - how do I pass arguments? 接收回复(按照 mpm 的建议)。

您传递的数据不能是 DOM 元素或 DOM 中的任何内容,否则您将违反线程安全。相反,您需要将执行繁重工作所需的任何数据提取到一个单独的对象中,并将其传递给工作人员进行处理。

例如,在我处理的一个应用程序中,我将用于图像处理和 OCR 的数据传递给网络工作者以进行并发处理,以免冻结 UI 线程。但我必须先从 DOM 中复制数据。