点击开始按钮每秒调用一次接口,点击结束按钮停止调用接口怎么实现

发布于 2022-09-13 00:28:39 字数 1562 浏览 17 评论 0

各位大佬现在有如下需求:
点击开始按钮触发protoChange函数,每秒调用一次getProtocolsRequest接口拉取数据 ,点击关闭按钮触发stopChange函数停止调用getProtocolsRequest函数。具体要怎么写啊?求解!!!先在此谢过了。

    const stopChange = () => {
        setIsButton(false);
        // 停止获取协议信息
        getProtocolsRequest.cancel(history.location.pathname.split('flows/')[1]);
    };
    
    const protoChange = () => {
        // 每秒获取一次某个客户端的协议信息
        setIsButton(true);
        getProtocolsRequest.run(history.location.pathname.split('flows/')[1], startTime).then(result => {
            setProtocolsInfo([]);
            setProtocolsInfo(result.protocols);
            protoChange();
        });
    };

因为是TS项目这边有如下报错,怎么解决
image.png

    let intervalInfo: NodeJS.Timeout | null = null;

    const protoChange = () => {
        setIsButton(true);
        if (intervalInfo) {
            clearInterval(intervalInfo);
        }
        intervalInfo = setInterval(() => {
            // 每秒获取一次某个客户端的协议信息
            getProtocolsRequest.run(history.location.pathname.split('flows/')[1], startTime).then(result => {
                console.log(result.protocols);
                setProtocolsInfo([]);
                setProtocolsInfo(result.protocols);
            });
        }, 1000);
        
    };

    const stopChange = () => {
        clearInterval(intervalInfo);
        setIsButton(false);
        // 停止获取协议信息
        getProtocolsRequest.cancel(history.location.pathname.split('flows/')[1]);
    };

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦行七里 2022-09-20 00:28:39

直接用ahooks里面的useInterval就解决了,非常方便,想了解更多的朋友可以去官方文档深入了解

//初始值timeInterval为1s调用一次 
const [timeInterval, setTimeInterval] = useState(1000);
useInterval(() => {
        if (timeInterval !== 0) {
            getProtocolsRequest.run(history.location.pathname.split('flows/')[1], startTime).then(result => {
                setProtocolsInfo([]);
                setProtocolsInfo(result.protocols);
            });
        }
    }, timeInterval);
//点击开始将timeInterval赋值为1s
const protoChange = () => {
        setIsButton(true);
        setTimeInterval(1000);
    };
//点击关闭将timeInterval重置为0s
const stopChange = () => {
        setIsButton(false);
        setTimeInterval(0);
        // 停止获取协议信息
        getProtocolsRequest.cancel(history.location.pathname.split('flows/')[1]);
    };
虐人心 2022-09-20 00:28:39
点击按钮开始循环执行某一事件,点击停止时,终止该事件,可采用定时器实现该方法
let intervalInfo = null;
// 开始执行
function start (){
 // 若点击开始时,已存在定时器实例,先行取消定时器,再重新执行定时器
 if(intervalInfo){
  clearInterval(intervalInfo)
 }
 intervalInfo = setInterval(()=>{
   // 调用接口
 },1000)
}
// 结束执行
function stop () {
 clearInterval(intervalInfo)
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文