节点的计时器不按照文档运行
Node's timers not behaving as per documentation
所以我真的迷失了这一点。
我使用 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
应该 return 一个超时对象,而不是一个 id。
这对我来说是个问题,因为我想在存储的变量上调用 refresh
,但现在不能(我没有找到根据 id 检索超时对象的方法)。
是没有使用正确节点版本的反应问题吗?还是回归?我也尝试过 10.2 版本,但没有成功。
提前致谢!
"Timeout objects" 实际上只是超时的 id,它是一个数字。所以我认为 API 的行为符合规定。
也许混淆是在 Nodejs 中它 returns 一个对象而在浏览器中它 returns 一个 id。您的代码在浏览器中执行,而不是在 Nodejs 中执行。请参阅讨论:What does setTimeout return?
您的反应代码正在浏览器中执行,而不是在 NodeJS 中执行。这意味着您需要查看 setTimeout
的文档不同。请参阅 MDN's documentation on setTimeout 表明它应该 return 一个 timeoutID
可以传递给 clearTimeout
.
据我所知,浏览器中没有 timer.refresh()
的等效项,但您可能会找到实现此行为的库,或者自己实现它。
所以我真的迷失了这一点。 我使用 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
应该 return 一个超时对象,而不是一个 id。
这对我来说是个问题,因为我想在存储的变量上调用 refresh
,但现在不能(我没有找到根据 id 检索超时对象的方法)。
是没有使用正确节点版本的反应问题吗?还是回归?我也尝试过 10.2 版本,但没有成功。
提前致谢!
"Timeout objects" 实际上只是超时的 id,它是一个数字。所以我认为 API 的行为符合规定。
也许混淆是在 Nodejs 中它 returns 一个对象而在浏览器中它 returns 一个 id。您的代码在浏览器中执行,而不是在 Nodejs 中执行。请参阅讨论:What does setTimeout return?
您的反应代码正在浏览器中执行,而不是在 NodeJS 中执行。这意味着您需要查看 setTimeout
的文档不同。请参阅 MDN's documentation on setTimeout 表明它应该 return 一个 timeoutID
可以传递给 clearTimeout
.
据我所知,浏览器中没有 timer.refresh()
的等效项,但您可能会找到实现此行为的库,或者自己实现它。