我正在使用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函数。