javascript - Electron setTimeout 在渲染器进程中返回数字而不是 Timeout 对象
问题描述
我注意到在 Electron 的渲染器进程中,setTimeout
节点函数返回一个number
(整数)而不是一个Timeout
对象。
在主进程中,它返回预期的Timeout
对象
我使用最新版本(即4.0.5
)。
.
渲染器进程的控制台:
主进程控制台:
npm start
> electron-timer-bug@0.0.1 start /home/doom/Documents/projets/testElectron/electron-timer-bug
> electron .
/home/doom/Documents/projets/testElectron/electron-timer-bug/node_modules/electron/dist/electron: /lib/x86_64-linux-gnu/libdbus-1.so.3: no version information available (required by /home/doom/Documents/projets/testElectron/electron-timer-bug/node_modules/electron/dist/electron)
/home/doom/Documents/projets/testElectron/electron-timer-bug/node_modules/electron/dist/electron: /lib/x86_64-linux-gnu/libdbus-1.so.3: no version information available (required by /home/doom/Documents/projets/testElectron/electron-timer-bug/node_modules/electron/dist/electron)
Fontconfig warning: "/etc/fonts/fonts.conf", line 86: unknown element "blank"
mainWatchdog : Timeout {
_called: false,
_idleTimeout: 1000,
_idlePrev:
TimersList {
_idleNext: [Circular],
_idlePrev: [Circular],
_unrefed: false,
msecs: 1000,
_timer: Timer { _list: [Circular] } },
_idleNext:
TimersList {
_idleNext: [Circular],
_idlePrev: [Circular],
_unrefed: false,
msecs: 1000,
_timer: Timer { _list: [Circular] } },
_idleStart: 648,
_onTimeout: [Function],
_timerArgs: undefined,
_repeat: null,
_destroyed: false,
[Symbol(unrefed)]: false,
[Symbol(asyncId)]: 7,
[Symbol(triggerId)]: 5 }
typeof(mainWatchdog) : object
mainWatchdog.constructor.name: Timeout
main callback
有或没有 nodeIntegration 都是一样的。
这是测试仓库:https ://gitlab.com/doom-fr/electron-timer-bug
正常吗?怎么了?
厄运
解决方案
在渲染器进程中,setTimeout()或window.setTimeout()是一个返回整数的 Web API 函数:
返回值
返回的 timeoutID 是一个正整数值,用于标识调用 setTimeout() 创建的计时器;可以将此值传递给 clearTimeout() 以取消超时。
而在main process 中,setTimeout()是一个 Node.js全局对象方法(在Timers中描述),它返回一个Timeout对象:
setTimeout(回调,延迟[,...参数])
- callback 当计时器结束时调用的函数。
- delay 在调用回调之前等待的毫秒数。
- ...args 调用回调时传递的可选参数。
返回: <Timeout> 用于 clearTimeout()
为了从渲染进程调用 Node.js 方法,你必须使用 Electron 的远程getGlobal方法;例如:
require('electron').remote.getGlobal('setTimeout')(() => { console.log('done'); }, 2000);
推荐阅读
- jquery - 主干视图中的多个 jQuery 对象
- vue.js - 是否有可能让哪个组件调用一些动作 Vuex?
- sql - SQL Server 2014 无法连接
- html - 如何使用 CSS 显示时间线
- angularjs - 比较两个 API 调用的结果并在 MEAN 应用程序中返回它们的差异
- javascript - 基于键如何从 JavaScript 中的数组中过滤?
- mysql - 将一个 CSV 上传到 Mysql 中的两个不同表中
- typescript - 可选属性与非可选属性?
- powershell - Powershell:工作流不能使用递归
- amazon-emr - EMR 上的 Flink - 没有输出到控制台或文件