轮询理解其实轮询的重点是间隔多久执行一次,而不是循环本身。Ajax是一种异步请求。从发起请求到收到响应是一个完整的过程。此过程所需的时间是不可预测的。极端的说,如果请求所需要的时间超过了我们轮询的时间间隔,那么就会出现很多问题,所以轮询的时间间隔应该以保证请求过程完成为前提,这样比较合乎逻辑。业务描述:页面初始化显示第一页数据,然后每十秒刷新当前页面数据改变过滤条件或者改变页码直接刷新数据,然后当前数据也刷新每十秒。业务逻辑点分析:手动调用时,立即执行发起请求,然后每隔十秒执行一次,并刷新一次列表。实现思路是先调用request。在请求成功的回调函数中设置定时器setTimeout。在定时器中重复1.2的操作。将1.2.3步骤封装成递归函数//轮询方法polling(page){this.getWorks(page).then(res=>{this.pollingST=setTimeout(()=>{clearTimeout(this.pollingST)this.polling(page)},10000)})}为什么不使用setIntervalsetInterval的功能似乎非常符合轮询的概念。如果我们的操作是同步代码,那么使用setInterval是没有问题的。问题在于setInterval不够灵活,无法得知上一次请求是否已经完成。.所以setTimeout会更好。注意事项在轮询中,我用pollingST变量记录了定时器。每次执行前,必须清除之前的定时器,因为递归调用是在定时器内部,所以清除定时器非常方便结束轮询完成伪代码
