节点的计时器不符合文档

问题描述 投票:0回答:2

所以我真的迷失了这个。我使用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版本,但没有运气。

提前致谢!

javascript node.js reactjs npm nvm
2个回答
1
投票

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

据我所知,浏览器中没有timer.refresh()的等价物,但你可以找到一个实现这种行为的库,或者自己实现它。


0
投票

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

也许令人困惑的是,在Nodejs中它返回一个Object,在浏览器中它返回一个id。您的代码在浏览器中执行,而不是在Nodejs中执行。见牧师:What does setTimeout return?

© www.soinside.com 2019 - 2024. All rights reserved.