Таймеры узла не ведут себя согласно документации - PullRequest
0 голосов
/ 10 сентября 2018

Так что я действительно потерян на этом. Я использую 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, а не идентификатор.

Это проблема для меня, потому что я хочу вызвать refresh для сохраненной переменной и не могу прямо сейчас (я не нашел способов извлечь объект тайм-аута на основе идентификатора).
Это проблема с реакцией, которая не использует правильную версию узла? Или это регресс? Я тоже попробовал версию 10.2 без удачи.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Ваш код реакции выполняется в браузере, а не в NodeJS.Это означает, что документация, которую вам нужно просмотреть для setTimeout, отличается.См. документацию MDN по setTimeout , показывающую, что он должен возвращать timeoutID, который может быть передан clearTimeout.

Насколько я знаю, для timer.refresh() нет эквивалента вбраузер, но вы, вероятно, можете найти библиотеку, которая реализует это поведение, или реализовать ее самостоятельно.

0 голосов
/ 10 сентября 2018

«Объекты тайм-аута» на самом деле являются просто идентификатором тайм-аута, который является числом. Поэтому я думаю, что API ведет себя так, как указано.

Возможно, путаница заключается в том, что в Nodejs он возвращает объект, а в браузере - идентификатор. Ваш код выполняется в браузере, а не в Nodejs. Смотрите обсуждение герр: Что возвращает setTimeout?

...