所以我真的迷失了这个。我使用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版本,但没有运气。
提前致谢!
您的反应代码正在浏览器中执行,而不是在NodeJS中执行。这意味着您需要查看setTimeout
的文档是不同的。看MDN's documentation on setTimeout显示它应该返回一个可以传递给timeoutID
的clearTimeout
。
据我所知,浏览器中没有timer.refresh()
的等价物,但你可以找到一个实现这种行为的库,或者自己实现它。
“超时对象”实际上只是超时的id,它是一个数字。所以我认为API的行为符合规定。
也许令人困惑的是,在Nodejs中它返回一个Object,在浏览器中它返回一个id。您的代码在浏览器中执行,而不是在Nodejs中执行。见牧师:What does setTimeout return?