我注意到在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
正常吗?怎么了?
Doom
答案 0 :(得分:1)
在渲染器过程中,setTimeout()或window.setTimeout()是一个Web API函数,它返回一个整数:
返回值
返回的timeoutID是一个正整数,用于标识 通过调用setTimeout()创建的计时器;这个值可以是 传递给clearTimeout()来取消超时。
在主流程中,setTimeout()是Node.js 全局对象方法(在Timers中进行了描述),该方法返回一个{{ 3}}对象:
setTimeout(callback,delay [,... args])
- 回调计时器结束时要调用的函数。
- 延迟调用回调之前要等待的毫秒数。
- ... args 调用回调时传递的可选参数。
返回:
与clearTimeout()一起使用
为了从 renderer进程中调用Node.js方法,必须使用Electron的远程Timeout方法;例如:
require('electron').remote.getGlobal('setTimeout')(() => { console.log('done'); }, 2000);