(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](https://i.stack.imgur.com/8Dy2H.png)
InPC_A (ubuntu 16.04, сработало, будет). Когда я объявляю testTimer как число, tslink предупреждает меня, что он должен быть 'Timer', но компиляция и пакет веб-пакетов будут работать, и clearInterval также будет работать.но если testTimer объявлен как «Таймер», компиляция не удастся.это означает, что на компьютере «сработала воля» веб-пакет будет использовать интерфейс es6.
В PC_B (ubuntu 14.04 , работал неправильно) объявить testTimer как число, компиляция завершилась неудачно!объявите testTimer как Timer, скомпилируйте успех! Это явление прямо противоположное.
Итак, мой вопрос в качестве заголовка, как указать интерфейс setInterval, я хочу указать setInterval, использовать интерфейс es6, Итак, кодв другой среде будет работать один и тот же результат.