首页 > 解决方案 > setInterval 内函数中的参数不变

问题描述

我正在使用 setInterval 实现轮询,但遇到了一些问题。我有一个看起来像这样的轮询功能

const pollMessages = () => {
  if (interval) {
    return false;
  }
  interval = setInterval(callApi, delay);
};

我也有清除间隔的功能

const stopPolling = () => {
  if (interval) {
    clearInterval(interval);
    interval = null;
  }
};

callApi函数接受一个参数并向端点发出请求。看起来像这样


  const callApi = () => {
    Api.get('/new-message', lastMessage)
  }

这里的问题是每次发出请求时,如果有新消息,lastMessage 变量应该被更新,但我遇到的问题是新请求中的值没有更新。它继续使用旧的 lastMessage 发送。我尝试将更新的 lastMessage 作为参数传递给,callApi但它没有任何区别。我想要在 setInterval 运行时可以在某些请求中更改 lastMessage 参数的情况。我该如何解决这个问题?

标签: javascriptsetintervalpolling

解决方案


如果我正确理解您的代码,这是因为 lastMessage 的值是作为参数发送的,而不是对变量本身的引用。

您需要创建一个 setter 函数,您可以使用要传递的值调用该函数以更改变量。

例如:

const setLastMessage = (value) => {
  lastMessage = value;
}

然后,您将setLastMessage作为参数传递并相应地调整您的 API 函数。


推荐阅读