Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setInterval内函数中的参数未更改_Javascript_Setinterval_Polling - Fatal编程技术网

Javascript 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

我正在使用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作为参数传递给
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返回新消息,它也不会改变。它一直在使用旧的