【问题标题】:setInterval function in javascript stops executing after a few secondsjavascript中的setInterval函数在几秒钟后停止执行
【发布时间】:2021-06-02 07:23:47
【问题描述】:

我正在使用 setInterval 连续向节点服务器发送 GET 请求,以根据 playerState 同步 2 个 youtube 嵌入播放器。 useEffect hook 用于在 mount 时调用 setInterval 函数。这个 setInterval 调用 controlPlayer 函数。我使用 console.log 来测试代码。 controlPlayer 函数执行几秒钟console image 并停止执行

const controlPlayer = async () => {
    try {
      const { data } = await axios.get('/api/getplayerstate');
      const res = data.playerState;
      if(res == 1) {
        player.playVideo();
        console.log(res);
      }
      else if(res == 2) {
        player.pauseVideo();
        console.log(res);
      }
    } catch(error) {
      console.log(error);
    }
  }

  useEffect(() => {
    setInterval(controlPlayer, 1000);
  }, []);

我看到了很多问题,但我不知道问题是什么。这可以解决还是有任何替代逻辑?

【问题讨论】:

  • 您的 console.log 语句位于 if 块内,这意味着它们将有条件地执行;尝试在try 块之前添加一条日志语句。
  • 可能是您的 api 由于错误或限制而停止响应

标签: javascript setinterval


【解决方案1】:

setInterval 可能不会停止,但res 具有您尚未涵盖的值。
您还应该实现else,否则res 的其他值不会被您的console.log() 调用覆盖:

      if(res == 1) {
        player.playVideo();
        console.log(res);
      }
      else if(res == 2) {
        player.pauseVideo();
        console.log(res);
      }
      else {
        console.log(res);
      }

但是为什么要让console.log 输出有条件呢?

      console.log(res);

      if(res == 1) {
        player.playVideo();
      }
      else if(res == 2) {
        player.pauseVideo();
      }

正如您可能想象的那样,这也是 switch 语句的一个很好的用例。

【讨论】:

  • 是的,你是对的。 setInterval 函数不是这里的问题。使 console.log 有条件是我的错误。我没有好好思考。我将添加一个 else 语句,然后再试一次。
  • 当然,有时您会忽略那些简单的错误。祝你好运。
  • 我添加了 else 语句。现在,它只是停止向服务器发送请求,即 try 块内的语句没有执行,但 try 块之前的 console.log 语句正在工作。你能帮帮我吗?
  • 您可以在此处发布另一个问题。看来您还没有为res 实现所有可能的值?你读过 API 吗?什么是控制台输出?这对于 cmets 部分来说太长了。请将您的新问题作为新问题发布。
  • 好的,我将发布一个单独的问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 2018-10-22
  • 1970-01-01
  • 2014-05-18
  • 2015-12-28
相关资源
最近更新 更多