Angular HttpClient-在最终响应之前从服务器获取进度消息

时间:2019-02-07 00:05:16

标签: angular server

我正在使用Angular HttpClient服务调用一个Web服务,这可能需要几分钟才能完成。我想收到进度状态(包括百分比和消息),以在最终响应之前显示在浏览器上。 Angular是否有支持此功能的机制?

我尝试从服务器发送100状态,并将进度信息作为标题的一部分,但这不起作用。 HttpClient支持ProgressEvent API,但这仅用于跟踪多部分请求的上传/下载。

我可以创建另一个服务,然后在计时器上进行轮询,但是还有另一种更标准的方法来实现这一点吗?

3 个答案:

答案 0 :(得分:0)

您可以执行类似的操作,为Web服务中的消息创建BehaviorSubject,然后将其连接到组件中以进行响应。您只需在BehaviourSubject中发送消息。然后,当您希望它消失时,发送空白消息。看看RxJ带来了什么。

答案 1 :(得分:0)

您尝试过Observables

  

可观察对象为发布者之间传递消息提供了支持   和您的应用程序中的订阅者。可观察物提供了重要的   优于其他事件处理技术(异步)   编程并处理多个值。

更新

如果上述方法不起作用,您可以使用计时器作为主要选择。

const intervalId = setInterval(() => {
      if (CHECK IF DONE) {
           clearInterval(intervalId);
    // DO THE THING YOU WANT AFTER COMPLETE
      }
      else {
        // GET PROGRESS
      }
    }, 1000);

答案 2 :(得分:0)

我不认为用angular来做这件事是标准的方法。

我认为您似乎需要对服务器执行两个请求

  • 首先,是对实际运行长时间运行的进程的端点的请求。该端点将在单独的线程上启动该进程,并立即将该进程的ID返回给客户端以检查状态
  • 使用第一个请求返回的进程ID,您可以调用检查状态端点。您可以设置间隔来检查进度并更新UI。