如何在使用Node.js和ES6时指定setInterval接口(电子,反应)

时间:2018-06-26 02:20:15

标签: javascript node.js typescript webpack electron

(环境,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起作用

另一种现象如下图所示,

screenshot

在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,因此,不同环境中的代码将工作相同的结果。

0 个答案:

没有答案