javascript - 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 参数的情况。我该如何解决这个问题?
解决方案
如果我正确理解您的代码,这是因为 lastMessage 的值是作为参数发送的,而不是对变量本身的引用。
您需要创建一个 setter 函数,您可以使用要传递的值调用该函数以更改变量。
例如:
const setLastMessage = (value) => {
lastMessage = value;
}
然后,您将setLastMessage
作为参数传递并相应地调整您的 API 函数。
推荐阅读
- regex - 为什么带有 /mg 修饰符的 perl 正则表达式匹配行尾?
- css - Bootstrap SASS 根据断点更改间隔值
- json - “Excel VBA 运行时错误'13':类型不匹配”使用 JsonConverter
- javascript - Node 和 React js 中 Web 应用程序的消息翻译方法
- python - 完善如何等待外部依赖
- swift - Apple 开发者 SwiftUI 教程的预览问题 - 与 UIKit 的框架集成接口
- r - 在具有不同条数的ggplot堆叠条形图中保持恒定条形宽度
- xslt-1.0 - 如何在页面 xsl fo 上将行保持在一起?
- perl - 如何在 perl 中运行多个测试脚本,并从另一个脚本中提供参数?
- android - 收入猫购买