【问题标题】:Electron setTimeout returns number in renderer process instead of Timeout objectElectron setTimeout 在渲染器进程中返回数字而不是 Timeout 对象
【发布时间】:2019-07-14 00:02:07
【问题描述】:

我注意到在 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

正常吗?怎么了?

厄运

【问题讨论】:

    标签: javascript node.js electron settimeout


    【解决方案1】:

    渲染器进程中,setTimeout()window.setTimeout() 是一个返回整数的 Web API 函数:

    返回值

    返回的 timeoutID 是一个正整数值,用于标识 调用 setTimeout() 创建的计时器;这个值可以 传递给 clearTimeout() 以取消超时。

    而在主进程中,setTimeout() 是一个 Node.js 全局对象 方法(在Timers 中描述),它返回一个Timeout 对象:

    setTimeout(callback, delay[, ...args])

    • callback 定时器结束时调用的函数。
    • 延迟调用回调之前等待的毫秒数。
    • ...args 调用回调时传递的可选参数。

    返回: 用于 clearTimeout()

    为了从渲染进程调用Node.js方法,你必须使用Electron的远程getGlobal方法;例如:

    require('electron').remote.getGlobal('setTimeout')(() => { console.log('done'); }, 2000);
    

    【讨论】:

      猜你喜欢
      • 2018-05-29
      • 2017-10-14
      • 2017-08-04
      • 2019-10-27
      • 2017-05-01
      • 1970-01-01
      • 2017-06-01
      • 2018-01-05
      • 1970-01-01
      相关资源
      最近更新 更多