电子setTimeout在渲染器进程中返回数字,而不是Timeout对象

时间:2019-02-20 10:21:04

标签: javascript node.js electron settimeout

我注意到在Electron的渲染过程中setTimeout节点函数返回number(整数)而不是Timeout对象。

在主流程中,它返回预期的Timeout对象

我使用的是最新版本(即4.0.5)。

渲染器过程的控制台:

enter image description here

主过程控制台:

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

1 个答案:

答案 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);