vue2中设计一个轮询任务进行发请求,大概如何实现呢?
先是给后端下达任务,后端去处理后存储到数据库,中途一直会发请求查询数据是否出现在数据库中,当能查询到数据时,会由后端返回给前端。
请问这种情况下用下面的代码合适吗?方便的话能否提供下更好的。
setInterval(() => { setTimeout(this.getNewMessage(), 0);
}, 3000);
回答:
差不多就下面这种逻辑
// 为了在destroyed中清除定时器,这里挂载到this上,如若不需要清除也可以定义一个局部变量const loopQuery = () => {
this._timer = setTimeout(async () => {
await axios('查询接口')
if(条件成立) clearTimeout(this._timer)
else loopQuery()
}, 3000)
}
await axios('下达任务接口')
loopQuery()
这里是等待请求返回才继续启动下一个定时器的,考虑到你时长蛮长的,其实直接用setInterval
也没太大问题,查询数据是否在数据库也不会很耗时,所以这个可以根据实际情况决定,若用setInterval
就是下面这样
await axios('下达任务接口')this._timer = setInterval(async () => {
await axios('查询接口')
if(条件成立) clearInterval(this._timer)
}, 3000)
回答:
这样的场景,我感觉更适合用websocket,后端更新完毕数据后推送一条消息给前端。题主可以考虑一下这个方向。
以上是 vue2中设计一个轮询任务进行发请求,大概如何实现呢? 的全部内容, 来源链接: utcz.com/p/934256.html