节点的计时器不按照文档运行

时间:2018-09-10 08:50:29

标签: javascript node.js reactjs npm nvm

所以我真的迷失了这个。 我使用ubuntu和nvm作为节点。 我什至删除了apt安装的节点版本,以确保

node --version
> v10.10.0

npm --version
> 6.4.1

所以我create-react-app并使用此简单代码

import React from 'react'
import ReactDOM from 'react-dom'

class App extends React.Component
{
    componentDidMount()
    {
        const a = setTimeout(() => {return}, 5000)
        console.log("a = ", a)
    }

    render()
    {
        return (
        <div>
            hello
        </div>)
    }
}

ReactDOM.render(<App />, document.getElementById('root'))

然后我npm start。访问该页面时,控制台将显示一个数字(a = 4)。但是https://nodejs.org/api/timers.html指出setTimeout应该返回一个Timeout对象,而不是id。

这对我来说是个问题,因为我希望在存储的变量上调用refresh,并且现在无法调用(我找不到基于id检索超时对象的方法)。
没有使用正确的节点版本是一个反应问题吗?还是回归?我也尝试过10.2版本,但是没有运气。

谢谢!

2 个答案:

答案 0 :(得分:1)

您的反应代码正在浏览器中执行,而不是在NodeJS中执行。这意味着您需要查阅setTimeout的文档是不同的。看到MDN's documentation on setTimeout,表明它应该返回一个timeoutID,可以将其传递给clearTimeout

据我所知,浏览器中没有timer.refresh()的等效项,但是您可能会找到一个实现此行为的库,也可以自己实现。

答案 1 :(得分:0)

“超时对象”实际上只是超时的ID,它是一个数字。因此,我认为API的行为符合规定。

也许令人困惑的是,在Nodejs中它返回一个对象,而在浏览器中它返回一个ID。您的代码在浏览器中执行,而不是在Nodejs中执行。请参阅讨论负责人:What does setTimeout return?