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

前端 - 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请求(从预请求脚本)。 有没有一种方法可以通过单击邮递员按钮来获取访问令牌并发送经过身份验证的请求?

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

  • 问题内容: 我使用带有固定线程池的java.util.concurrent.ExecutorService执行任务列表。我的任务列表通常约为80-150,并且我将随时运行的线程数限制为10,如下所示: 我的用例要求即使完成的任务也应重新提交给 ExecutorService, 但只有在服务/完成所有 已 提交的任务后才应再次执行/采用。基本上,提交的任务应以轮换为基础执行。因此,在这种情况下不会有