Skip to content

Commit 4226ea1

Browse files
committed
Detect upload/download for progress event in XHR
1 parent 2f9b978 commit 4226ea1

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

src/utils/fetch.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ const createFetchOptions = (url, options, type) => {
9090
*/
9191
const fetchXhr = (target, fetchOptions) => new Promise((resolve, reject) => {
9292
const req = new XMLHttpRequest();
93-
let onProgress = () => {};
9493

9594
const onError = (msg) => (ev) => {
9695
console.warn(msg, ev);
@@ -112,18 +111,18 @@ const fetchXhr = (target, fetchOptions) => new Promise((resolve, reject) => {
112111
};
113112

114113
if (typeof fetchOptions.onProgress === 'function') {
115-
onProgress = (ev) => {
114+
const rel = fetchOptions.method.toUpperCase() === 'GET' ? req : req.upload;
115+
rel.addEventListener('progress', (ev) => {
116116
if (ev.lengthComputable) {
117-
const percentComplete = ev.loaded / ev.total * 100;
117+
const percentComplete = Math.round(ev.loaded / ev.total * 100);
118118
fetchOptions.onProgress(ev, percentComplete);
119119
}
120-
};
120+
});
121121
}
122122

123123
req.addEventListener('load', onLoad);
124124
req.addEventListener('error', onError('An error occured while performing XHR request'));
125125
req.addEventListener('abort', onError('XHR request was aborted'));
126-
req.addEventListener('progress', onProgress);
127126
req.open(fetchOptions.method, target);
128127
Object.entries(fetchOptions.headers).forEach(([k, v]) => req.setRequestHeader(k, v));
129128
req.responseType = fetchOptions.responseType || '';

0 commit comments

Comments
 (0)