我正在使用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参数的情况。我该如何解决?

最佳答案

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

您将需要创建一个setter函数,可以通过传递一个值来调用它以更改变量。

例如:

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


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

07-26 01:17