setInterval 的值为 6 秒,而是每 9.5 秒执行一次。这是为什么?

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

我的 React Native 应用程序中有一个非常简单的钩子,它应该每 6 秒控制台记录一个字符串,但是,即使我将 setTimeout 设置为每 6000 毫秒执行一次,实际上它每 9.5 秒执行一次。我用秒表确认了这一点。我的钩子看起来像这样:

const usePingHeartbeat = () => {
    useEffect(() => {
        const pingHeartbeat = async () => {
            console.log('Pinged');
        };

        const intervalId = setInterval(pingHeartbeat, 6000);

        return () => clearInterval(intervalId);
    }, []);
};

export default usePingHeartbeat;

这里可能出了什么问题?

javascript reactjs react-native react-hooks settimeout
1个回答
0
投票

导致延误时间比预期时间长的原因有很多。

请记住事件循环,作为第二个参数传递的延迟是“最小”延迟,在此之后回调将被添加到消息队列中。如果队列中没有其他消息,并且调用堆栈为空,则在延迟后立即处理该消息。因此,第二个参数表示最短时间,而不是保证时间。 了解更多关于

事件循环

因此,如果有什么事情让你的单线程 JS 忙碌,那么是的,延迟会比你预期的要多

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