代码之家  ›  专栏  ›  技术社区  ›  Gabriel Pizarro

如何在Electron中使用多线程并兼容节点。JS和JQuery函数?

  •  0
  • Gabriel Pizarro  · 技术社区  · 6 年前

    我正在编写一个Electron应用程序,一些页面旨在通过从我的web API获取Json字符串来实时更新表。重要的是,首先必须在启动新的JavaScript线程之前或之后(无所谓),将我的表加载到文档(HTML)中。我已经需要使用主进程来处理按钮和表事件。

    该线程用于连续获取数据,如果它检测到与当前加载的文档存在差异,它会将这些更改放回服务器。现在,我在启动一个新线程时遇到了问题,该线程无法完全访问Node、Electron和JQuery中使用的预加载JS函数。

    下面列出了我尝试的内容以及出错的原因,因此您可以帮助我找到解决这些问题的方法或建议一个新的方向(可能是另一个NPM模块?):

    • Vanilla WebWorkers无法使用Node、Electron和JQuery中的任何预定义函数,因为它启动了一个全新的过程。
    • Node child\u process |此内置函数派生一个新线程。然而,它在一个完全不同的环境中工作,这意味着我无法看到它对控制台/文档的输出。
    • Electron WebWorkers |我在文档中找到了这些,并启用了NodeIntegrationInWorker。然而,它有一个错误,它无法从workers/api等中找到文件,我也找不到这些文件。重要的是要注意,这不是我必须安装的模块,所以在搜索了30分钟后,IDK甚至可以在我的系统上找到这些文件。
    • 我安装了几个不同的NPM模块,但都没有用,主要是因为它们被隔离(像扩展的WebWorkers,类似于Electron WebWorkers),或者它们被隔离(扩展child\u进程()。fork函数也不起作用,来自节点)。
      • 节点进程
      • workerjs公司
      • 螺纹
      • 网络工作者ng
      • webworker线程

    最后,为了修复我提到的第三个选项,我尝试将重点放在ASAR路径上 here 。修复了此错误:

    Uncaught Error: ENOENT, worker\api\exports\electron.js not found
    

    但现在,我的线程可能会在加载页面后启动,但甚至不会向控制台记录一个简单的“Hello”,这可能是由于出色的线程隔离。

    太长,读不下去了我需要一种方法来运行Electron中的第二个线程,该线程可以完全访问预定义的对象。该选项应该在主进程之后运行,而不是在页面进入无限while(True)循环后停止加载。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Gabriel Pizarro    3 年前

    正如Darkrum在评论中所回答的:

    setTimeOut或setInterval是您的朋友。

    经过一些额外的研究(如果我错了,请评论):

    这两个函数允许“同时”执行代码。因为Javascript在技术上只是一种单线程语言,所以真正的多线程并不存在。相反,JS引擎在处理时 setTimeout ,将不断检查主线程中的更新。