返回多个异步响应

时间:2018-05-14 19:11:22

标签: node.js express connection httprequest axios

我目前正在寻找设置接受请求的端点,并在加载时以递增方式返回响应数据。

应用这个是给定一次数据上传,我想计算一些不同的数据指标。由于每个指标都是异步计算的,我想将此指标的值返回给前端进行渲染。

为了测试,我的控制器看起来如下,试图使用res.write

uploadData = (req, res) => {
   res.write("test");
   setTimeout(() => {
       res.write("test 2");
       res.end();
   }, 3000);
}

但是,我认为问题源于我在React-Redux中编写的客户端,并通过Axios调用调用该路由。根据我的理解,这是因为一旦收到第一个响应,axios请求就会关闭,并且连接不会保持打开状态。这是我的axios调用的样子:

axios.post('/api', data)
  .then((response) => {
      console.log(response);
  })
  .catch((error) => {
       console.log(error);
  });

有一种简单的方法吗?我也考虑过流式传输,但是我对流媒体的关注是我希望每个连接在短时间内打开的客户端之间是直接且唯一的(即仅在计算度量标准时打开)。 / p>

我还应该提一下,上传的资源是一个db,我想避免因多个端点而多次解析和打开连接。

提前致谢,如果我能提供更多背景信息,请告诉我

1 个答案:

答案 0 :(得分:0)

在使用传统API时处理此问题的一种方法是将指标存储在某个对象中,例如数据库或redis,然后只需对资源进行长时间轮询。

对于一个真实世界的例子,假设您要计算以下foo指标,完成时间,请求长度,条形图,foobar。

您可以在存储中创建一个如下所示的对象:

{
  id: 1,
  lengthOfRequest: 123,
 .....
}

然后你会在你的API中创建一个类似于metrics/{id}的端点 并将返回该对象。只需继续调用路线,直到一切都完成。

当然,这有一些明显的缺点,但是一旦您获得足够的信息来了解指标平均需要多长时间才能完成,您可以调整API调用之间的时间。