Javascript setInterval内函数中的参数未更改
我正在使用setInterval实现轮询,但遇到了一些问题。我有一个投票函数,看起来像这样Javascript setInterval内函数中的参数未更改,javascript,setinterval,polling,Javascript,Setinterval,Polling,我正在使用setInterval实现轮询,但遇到了一些问题。我有一个投票函数,看起来像这样 const pollMessages = () => { if (interval) { return false; } interval = setInterval(callApi, delay); }; 我还有一个清除间隔的功能 const stopPolling = () => { if (interval) { clearInterval(interv
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作为参数传递给
callApi
,但没有任何区别。我希望在setInterval运行时,可以在某些请求中更改lastMessage参数。如何解决此问题?如果我正确理解了您的代码,这是因为lastMessage的值是作为参数发送的,而不是对变量本身的引用
您需要创建一个setter函数,可以使用要传递的值调用该函数来更改变量
例如:
const setLastMessage=(值)=>{
lastMessage=值;
}
然后将
setLastMessage
作为参数传递,并相应地调整API函数。如果我正确理解您的代码,这是因为lastMessage的值是作为参数发送的,而不是变量本身的引用
您需要创建一个setter函数,可以使用要传递的值调用该函数来更改变量
例如:
const setLastMessage=(值)=>{
lastMessage=值;
}
然后将
setLastMessage
作为一个参数传递,并相应地调整API函数。请向我们展示预期输出与您看到的内容,并包括测试lastMessageBetter的部分,以便有一个再现该问题的实时演示。建议使用codepen、jsfiddle、jsbin。仅仅因为您清除了一个间隔,这并不意味着当时已经发送但没有响应的请求不会返回,因为.get()
本身是异步的。@StackSlave我知道响应是异步的,但我一直在监视我的网络请求并记录lastMessage的值。即使api返回新消息,它也不会改变。它继续使用旧版本,请向我们展示预期输出与您看到的内容,并包括您测试LastMessage的部分,以便有一个复制问题的实时演示。建议使用codepen、jsfiddle、jsbin。仅仅因为您清除了一个间隔,这并不意味着当时已经发送但没有响应的请求不会返回,因为.get()
本身是异步的。@StackSlave我知道响应是异步的,但我一直在监视我的网络请求并记录lastMessage的值。即使api返回新消息,它也不会改变。它一直在使用旧的