Skip to content

Commit f2456e4

Browse files
committed
allow aborting when status is 'error'
1 parent d14f5c6 commit f2456e4

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

src/index.ts

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,9 @@ export class ChunkUploader<TMetadata extends Metadata> {
162162

163163
/**
164164
* Abort the upload process.
165-
* returns `false` if the status is not `paused`.
165+
* returns `false` if the status is not `paused` or `error`.
166166
*
167-
* status: `paused` -> `aborted`
167+
* status: `paused` or `error` -> `aborted`
168168
*/
169169
public abort() {
170170
if (!this.canAbort) return false;
@@ -173,7 +173,7 @@ export class ChunkUploader<TMetadata extends Metadata> {
173173
return true;
174174
}
175175
public get canAbort() {
176-
return this.status === 'paused';
176+
return this.status === 'paused' || this.status === 'error';
177177
}
178178

179179
/*************
@@ -239,8 +239,10 @@ export class ChunkUploader<TMetadata extends Metadata> {
239239
break;
240240
} catch (error) {
241241
if (this.status === 'pausing') return false;
242-
if (retry < this._retryDelays.length) await this._waitForRetry(this._retryDelays[retry]);
243-
else {
242+
if (retry < this._retryDelays.length) {
243+
const isPausd = await this._waitForRetry(this._retryDelays[retry]);
244+
if (isPausd) return false;
245+
} else {
244246
this.status = 'error';
245247
this._error = error;
246248
if (this._onError) this._onError(error);
@@ -308,19 +310,28 @@ export class ChunkUploader<TMetadata extends Metadata> {
308310
}
309311

310312
protected _waitForRetry(ms: number) {
311-
return new Promise<void>(resolve => {
313+
return new Promise<boolean>(resolve => {
312314
let isResolved = false;
313315

314-
const handleResolve = () => {
316+
const handleTimeout = () => {
317+
if (isResolved) return;
318+
isResolved = true;
319+
this._removeStatusChangedEventListener('pausing', handlePause);
320+
clearTimeout(timeoutId);
321+
resolve(false);
322+
};
323+
324+
const handlePause = () => {
315325
if (isResolved) return;
316326
isResolved = true;
317-
this._removeStatusChangedEventListener('pausing', handleResolve);
318-
resolve();
327+
this._removeStatusChangedEventListener('pausing', handlePause);
328+
clearTimeout(timeoutId);
329+
resolve(true);
319330
};
320331

321-
setTimeout(handleResolve, ms);
332+
const timeoutId = setTimeout(handleTimeout, ms);
322333

323-
this._addStatusChangedEventListener('pausing', handleResolve);
334+
this._addStatusChangedEventListener('pausing', handlePause);
324335
});
325336
}
326337

0 commit comments

Comments
 (0)