Как указать интерфейс setInterval при использовании Node.js & ES6 (электрон, реагировать) - PullRequest
0 голосов
/ 26 июня 2018

(Environment, Ubuntu 14.04, электрон 1.8.3, IDE: vscode) Я занимаюсь разработкой электронного приложения с использованием машинописного текста, реагируем, цель в tsconfig.json настроена на «es6», используйтеwebpack to package.

Здесь я нахожу странный результат при использовании setInterval.Вот мой код (код является разделом частной функции в файле TSX):

let cur=0;  
let testTimer=setInterval(()=>{
    console.log(cur);
    if(cur<5){
        cur++;
    }else{
        clearInterval(testTimer);
    }
}, 1000);

ClearInterval (testTimer) не работает, цикл обходится без журнала '5'.

Я пытаюсь найти причину, и я обнаружил, что здесь есть проблема, setInterval в es6 отличается от NodeJS, в es6 setInterval возвращает идентификатор номера, но NodeJS возвращает Object (NodeJS.Timer),clearInterval использует соответствующий параметр.Поэтому я предполагаю, что когда мой код компилируется в js, 'setInterval' и 'clearInterval' не совпадают, например, 'setInterval' использует интерфейс Nodejs, поэтому возвращает Object, но для 'clearInterval' используется параметр интерфейса es6, необходим номер.

Я отлаживаю его в инструменте электронного разработчика, мое предположение верно, setInterval возвращает объект (NodeJS.Timer).

Но!это явление не всегда существует, я пытаюсь перекомпилировать мой код, используя другой компьютер (аналогичная среда, но версия ubuntu - 16.04), он работает нормально, работает clearInterval (testTimer).

Я также отлаживаю в инструменте dev, setInterval возвращает число, поэтому clearInterval работал .

Другое явление, показанное на рисунке ниже,

screenshot

InPC_A (ubuntu 16.04, сработало, будет). Когда я объявляю testTimer как число, tslink предупреждает меня, что он должен быть 'Timer', но компиляция и пакет веб-пакетов будут работать, и clearInterval также будет работать.но если testTimer объявлен как «Таймер», компиляция не удастся.это означает, что на компьютере «сработала воля» веб-пакет будет использовать интерфейс es6.

В PC_B (ubuntu 14.04 , работал неправильно) объявить testTimer как число, компиляция завершилась неудачно!объявите testTimer как Timer, скомпилируйте успех! Это явление прямо противоположное.

Итак, мой вопрос в качестве заголовка, как указать интерфейс setInterval, я хочу указать setInterval, использовать интерфейс es6, Итак, кодв другой среде будет работать один и тот же результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...