【发布时间】:2018-04-26 01:27:46
【问题描述】:
我正在编写一个 Electron 应用程序,其中几个页面旨在通过从我的 Web API 获取 Json 字符串来实时更新表格。重要的部分是我的表格首先必须加载到文档(HTML)中,在我开始一个新的 JavaScript 线程之前或之后(没关系)。我已经需要使用主进程来处理按钮和表格事件。
线程用于持续获取数据,如果它检测到与当前加载的文档的差异,它会将这些更改放回服务器。现在,我无法启动一个可以完全访问 Node、Electron 和 JQuery 中使用的预加载 JS 函数的新线程。
这里列出了我尝试过的方法以及出错的原因,所以也许你可以帮助我找到解决这些问题的方法或提出新的方向(可能是另一个 NPM 模块?):
- Vanilla WebWorkers |无法使用来自 Node、Electron、JQuery 的任何预定义函数,因为它会启动一个全新的进程。
- 节点子进程 |这个内置函数派生了一个新线程。但是,它在完全不同的环境中工作,这意味着如果控制台/文档有任何输出,我将无法看到输出。
- 电子网络工作者 |我在 Docs 上找到了这些并启用了 NodeIntegrationInWorker。但是,它有一个错误,它无法从workers/api/etc 中找到文件,我也无法找到这些文件。请务必注意,这不是我必须安装的模块,因此在搜索 30 分钟后,这些文件甚至在我的系统上都存在 IDK。
- 我还安装了一些不同的 NPM 模块但无济于事,主要是因为它们是隔离的(例如类似于 Electron WebWorkers 的扩展 WebWorkers)或者它们是隔离的(扩展了不起作用的 child_process().fork 函数或者,来自节点)。
- 节点进程
- workerjs
- 线程
- webworker-ng
- 网络工作者线程
最后,为了解决我提到的第三个选项,我尝试关注 ASAR 路径,提到了here。修复了这个错误:
Uncaught Error: ENOENT, worker\api\exports\electron.js not found
但现在我处于加载页面后线程可能会启动但甚至不会将简单的“Hello”记录到控制台的点,这可能是由于出色的线程隔离。
TLDR;我需要一种在 Electron 中运行第二个线程的方法,该线程可以完全访问预定义的对象。这个选项应该希望在主进程之后运行,一旦页面进入无限的 while(True) 循环,就不会停止加载页面。
【问题讨论】:
-
线程?你在干嘛?处理按钮的主要过程?其他获取数据?带上它,伙计,我认为你已经走到了尽头。
-
哈哈,也许我有。本质上,我在 JS 中有一个无限循环(使用 Node 和 Electron 对象),它需要与其他 JS 代码(也使用 Node 和 Electron 对象)同时运行。我正在寻找解决所有这些问题的方法。
-
Settimeout 或 setinterval 是你的朋友。
-
另外,您对 JavaScript、electron 和 node.js 的理解也存在令人难以置信的缺陷。我建议实际阅读它们的实际工作原理
标签: javascript node.js multithreading electron web-worker