所以我真的迷失了这个。 我使用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版本,但是没有运气。
谢谢!
答案 0 :(得分:1)
您的反应代码正在浏览器中执行,而不是在NodeJS中执行。这意味着您需要查阅setTimeout
的文档是不同的。看到MDN's documentation on setTimeout,表明它应该返回一个timeoutID
,可以将其传递给clearTimeout
。
据我所知,浏览器中没有timer.refresh()
的等效项,但是您可能会找到一个实现此行为的库,也可以自己实现。
答案 1 :(得分:0)
“超时对象”实际上只是超时的ID,它是一个数字。因此,我认为API的行为符合规定。
也许令人困惑的是,在Nodejs中它返回一个对象,而在浏览器中它返回一个ID。您的代码在浏览器中执行,而不是在Nodejs中执行。请参阅讨论负责人:What does setTimeout return?