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,但找不到任何东西。我还基于此axios在Native API of JavaScript progressEvent的帮助下尝试了issue,并得到了相同的结果。
我会为此创建一个可观察对象并监听数据流吗?但是如何?
感谢有人可以帮助您。 预先感谢。