是否可以使Javascript的fetch()等待响应,即使响应返回一个小时也是如此,而无需进行第二次请求尝试?

时间:2018-08-10 10:01:05

标签: javascript ecmascript-6 request

在前端(html文件)上,我有一个JS代码,它向节点服务器启动POST请求,服务器端进行一些处理,然后将响应发送回去。

处理过程最多也可能需要半个小时。但是发生的是,仅五分钟没有收到响应,它重新提交了POST请求,这不是我想要的,因为它将中断后端处理。

我的问题是,是否有可能做到这一点?如果是,怎么办?

这是我的提取代码

SELECT *
FROM   (
  SELECT rownum as rn,
         A.*
  FROM   (
    SELECT *
    FROM   X
    ORDER BY ID desc
  ) A
)
WHERE  rn BETWEEN 0 AND 1000000;

2 个答案:

答案 0 :(得分:2)

你不能。

如果您需要在服务器上进行大量处理,则将其分解为多个部分。

  1. 向服务器发送请求
  2. 将请求中的数据放入队列中,并为其指定ID
  3. 将ID传回客户端
  4. 有一些监视队列,当您向队列添加数据时会对其进行处理
  5. 处理完队列中的项目后,将其标记为完成
  6. 将结果传达给客户

有几种方法可以实现步骤6。最简单的方法是,让客户机每隔一段时间轮询服务器一次:“我的ID的数据准备好了吗?”。一种替代方法是使用Web套接字,并在准备就绪时将响应推送到客户端。如果您想等待90分钟,那么查看Web Workers和Notifications API可能也是明智的选择。

答案 1 :(得分:2)

很明显,Fetch本身并没有实现设置超时的方法。有些人开发了workarounds

但是,我不确定这是要走的路。如果您的操作花了一个半小时而您想在每次完成后都得到结果,那么长时间保持浏览器处于打开状态且保持不变是很复杂的。如果用户关闭该选项卡然后重新打开它或刷新页面,会发生什么?它将再次拨打电话。

IMO的使用方式是使用websockets(socket.io),因此服务器可以在准备就绪时通知客户端,并且即使在此期间刷新页面也可以一起发送数据。 / p>