Electron setTimeout возвращает число в процессе рендеринга вместо объекта Timeout - PullRequest
0 голосов
/ 20 февраля 2019

Я заметил, что в процессе рендеринга Electron , setTimeout функция узла возвращает number (целое число) вместо Timeout Object.

В основном процессе, он возвращает ожидаемый 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

То же самое с узлом интеграции или без него.

Вот репозиторий для тестирования: https://gitlab.com/doom-fr/electron-timer-bug

Это нормально?Что не так?

Гибель

1 Ответ

0 голосов
/ 20 февраля 2019

В процессе визуализации , setTimeout () или window.setTimeout () - это функция веб-API, которая возвращает целое число:

Возвращаемое значение

Возвращенный timeoutID является положительным целочисленным значением, которое идентифицирует таймер, созданный вызовом setTimeout ();это значение может быть передано clearTimeout () для отмены тайм-аута.

В то время как в основном процессе , setTimeout () является Node.js метод глобального объекта (описан в Таймеры ), который возвращает объект Timeout :

setTimeout (обратный вызов, задержка [, ...args])

  • обратный вызов Функция, вызываемая по истечении таймера.
  • delay Количество миллисекунд ожидания до вызоваcallback.
  • ... args Необязательные аргументы для передачи при вызове обратного вызова.

Возвращает: для использования с clearTimeout ()

Чтобы вызвать метод Node.js из процесса визуализации , вам потребуется использовать удаленный метод Electron getGlobal ;например:

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