(环境,ubuntu 14.04,电子版1.8.3,IDE:vscode) 我正在使用打字稿开发电子应用程序,进行反应,将tsconfig.json中的目标配置为“ es6”,使用webpack进行打包。
在这里,当我使用setInterval
时发现奇怪的结果。这是我的代码(该代码是tsx文件中私有函数的一部分):
let cur=0;
let testTimer=setInterval(()=>{
console.log(cur);
if(cur<5){
cur++;
}else{
clearInterval(testTimer);
}
}, 1000);
clearInterval(testTimer)不起作用,循环删除了日志'5'。
我试图找到原因,然后发现问题出在es6中的'setInterval'与NodeJS不同,在es6中,setInterval返回一个数字ID,但是NodeJS返回一个Object(NodeJS.Timer), clearInterval使用其相应的参数。因此,我猜我的代码编译为js时,“ setInterval”和“ clearInterval”不匹配,例如,“ setInterval”使用Nodejs接口,因此返回一个Object,而“ clearInterval”使用es6接口参数则需要一个数字。
我在电子开发工具中对其进行了调试,我的猜测是正确的, setInterval返回一个对象(NodeJS.Timer)。
但是!这种现象并不总是存在,我尝试使用另一台计算机(相似的环境,但是ubuntu版本是16.04)重新编译我的代码,它可以正常工作,clearInterval(testTimer)可以工作。
我也在开发工具中调试, setInterval返回一个数字,因此clearInterval起作用。
另一种现象如下图所示,
在PC_A中(ubuntu 16.04,工作意愿) 当我将testTimer声明为数字时,tslink会警告我它应该是“ Timer”,但是webpack的编译和打包工作将起作用,而clearInterval也将起作用。 bu如果testTimer声明为'Timer',则编译将失败。 这意味着,在“工作意愿”计算机中,webpack将使用es6界面。
在PC_B中(ubuntu 14.04,工作错误) 将testTimer声明为数字,编译失败! 将testTimer声明为Timer,编译成功! 现象正好相反。
所以,我的问题是标题,如何指定setInterval接口,我想使用es6接口指定setInterval,因此,不同环境中的代码将工作相同的结果。