在dva框架中实现轮询

前两天做项目遇到了轮询问题,之前知道使用定时器来实现轮询,今天在dva使用定时器却有点小问题。
dva的model使用封装过的generate来实现,如下所示:

* getLatestList(action, { call, put, select }) {
     const data = yield call(getData);
     // 如果使用定时器来轮询getDate这个请求的话,代码就会是这样的
     setInterval(() => {
	   const data = yield call(getData); // 此时就会报错 因为yield 必须配合 * 来使用
	 }, 300)
}

上面示例的代码中在定时器中使用yield call(getData)会报错。
所以我们可以通过yield 关键字可以阻塞代码,将异步变为同步的特性来实现轮询, 我们可以通过设置一个延时函数,延时时间为300ms,当此次的数据请求完成之后通过延时函数延时300ms之后再进行下一次请求执行
所以,改造后的代码为

* getLatestList(action, { call, put, select }) {
	 const delay = ms => new Promise(resolve => setTimeout(resolve, ms);
     // 如果使用定时器来轮询getDate这个请求的话,代码就会是这样的
     // setInterval(() => {
	 //  const data = yield call(getData); // 此时就会报错 因为yield 必须配合 * 来使用
	 // }, 300)
	 while(true) {
	    const data = yield call(getData);
	    yield call(delay, 300); // 延时300ms之后进行下一次的while循环执行
     }
}

PS:以下是我的个人博客小站,欢迎关注哦
戳我戳我

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值