Angular 4 HttpClient Progress Event如何在运行时跟踪每个百分比

时间:2018-07-03 05:03:59

标签: javascript angular ionic3 httpclient progress

PS:我编辑了此问题,因为它被标记为重复。因此,这是一个新问题,不同于给定的重复问题。

我在Ionic中有一个提供商,它将处理我对服务器的所有API请求。在每个发布/获取/补丁/删除请求或基本上是 CRUD 操作中。我想在该 http操作上执行一个ProgressEvent,以跟踪请求的进度百分比。所以基本上我将获得该百分比的数据流。

这是我下面的代码:

publishEbook(data) {
const req = new HttpRequest('POST', `${url}/someApiEndpoint`, data, {
  reportProgress: true
});

return new Promise((resolve, reject) => {
  this.http.request(req).subscribe((event: HttpEvent<any>) => {
    switch (event.type) {
      case HttpEventType.Sent:
        console.log('Request sent!');
        break;
      case HttpEventType.ResponseHeader:
        console.log('Response header received!');
        break;
      case HttpEventType.UploadProgress:
        const percentDone = Math.round(100 * event.loaded / event.total);
        console.log(`Posting in progress! ${ percentDone }%`);
        console.log(`Event: ${event.loaded}`);
        break;
      case HttpEventType.Response:
        console.log(' Done!', event.body);
        resolve(data);
    }
  }, err => {
    console.log(err);
    reject(err)
  });
});

}

问题是当连接到互联网时我总是得到 100%,而在离线状态下我总是得到NaN,或者因为http调用是如此之快以至于无法截获它的价值?还有可能吗?

这是确定以下http操作的进度百分比的代码行:

const percentDone = Math.round(100 * event.loaded / event.total);

那么我如何跟踪进度百分比从 1、2、50到100% ,或者是每当传入新的数据块并获取百分比时调用一个监听器? / p>

我已经尝试过angular-progress-http,但找不到任何东西。我还基于此axiosNative API of JavaScript progressEvent的帮助下尝试了issue,并得到了相同的结果。

我会为此创建一个可观察对象并监听数据流吗?但是如何?

感谢有人可以帮助您。 预先感谢。

0 个答案:

没有答案