当前位置: 首页 > 知识库问答 >
问题:

前端 - vue2中设计一个轮询任务进行发请求,大概如何实现呢?

茅昀
2023-05-12

先是给后端下达任务,后端去处理后存储到数据库,中途一直会发请求查询数据是否出现在数据库中,当能查询到数据时,会由后端返回给前端。
请问这种情况下用下面的代码合适吗?方便的话能否提供下更好的。

setInterval(() => {
      setTimeout(this.getNewMessage(), 0);
    }, 3000);

共有2个答案

怀飞掣
2023-05-12

这样的场景,我感觉更适合用websocket,后端更新完毕数据后推送一条消息给前端。题主可以考虑一下这个方向。

李昱
2023-05-12

差不多就下面这种逻辑

// 为了在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)
 类似资料:
  • 我是一个新手,但我真的很喜欢长轮询的想法。 在阅读了它之后,我会这样实现它: 客户端请求服务器(AJAX) 服务器正在轮询DB以获取更改 识别更改时或服务器响应超时后 我的问题是,对于每一个请求,都在服务器上启动一个线程,并且每个线程都轮询DB。 在服务器上运行一个接受所有传入请求的线程不是更有效吗?例如: 客户端请求服务器(AJAX) 服务器将请求添加到队列(无响应) 辅助线程轮询数据库以获取与

  • 我使用java.util.concurrent.ExecutorService和固定线程池来执行任务列表。我的任务列表通常在80-150个左右,我已经将任何时候运行的线程数限制为10个,如下所示: 我的用例要求即使完成的任务也应该重新提交给ExecutorService,但是只有当所有已经提交的任务都被服务/完成时,才应该再次执行/获取。也就是说,提交的任务基本上应该轮流执行。因此,在这种情况下不

  • 为什么每个站点都解释说在SSE中,客户端和服务器之间的单个连接保持打开状态“使用SSE,客户端发送标准HTTP请求请求事件流,服务器最初以标准HTTP响应响应并保持连接打开” 然后,当服务器决定可以向客户端发送数据,而我试图实现SSE时,每隔几秒钟就会看到fiddler请求被发送 对我来说,这感觉就像是长时间的投票,没有一个连接保持打开。 此外,并不是服务器决定向客户机发送数据,而是只有在客户机发

  • 我正在尝试发送一个经过身份验证的请求,只需点击邮递员。 所以,我有一个名为“Oauth”的请求,我正在使用测试将令牌存储在局部变量中。 我现在要做的是,对于需要承载令牌的任何其他请求,自动运行Oauth请求(从预请求脚本)。 有没有一种方法可以通过单击邮递员按钮来获取访问令牌并发送经过身份验证的请求?

  • 本文向大家介绍vue2 前端搜索实现示例,包括了vue2 前端搜索实现示例的使用技巧和注意事项,需要的朋友参考一下 项目数据少的时候,搜索这样的小事情就要交给咱们前端来做了,重要声明,适用于小项目!!!!! 其实原理很简单,小demo是做搜索市区名称或者按照排名搜索。 页面布局成功之后,就是要做js配置了,首先是data初始化。 接下来获取后台数据,后台数据必须是一次性传递给前端,原因你懂的。 搜

  • 在此之前我问了一个问题。我的服务conifg是: 我编写了一个扩展mediator交易文件。该类返回文件名并向服务发送请求。服务没有输入消息。我要每天13:30的服务。我尝试添加新的计划任务。但是它不能工作?谁能告诉我如何设置这个计划任务? 我也不知道如何设置“固定服务器”。