@@ -162,9 +162,9 @@ export class ChunkUploader<TMetadata extends Metadata> {
162
162
163
163
/**
164
164
* Abort the upload process.
165
- * returns `false` if the status is not `paused`.
165
+ * returns `false` if the status is not `paused` or `error` .
166
166
*
167
- * status: `paused` -> `aborted`
167
+ * status: `paused` or `error` -> `aborted`
168
168
*/
169
169
public abort ( ) {
170
170
if ( ! this . canAbort ) return false ;
@@ -173,7 +173,7 @@ export class ChunkUploader<TMetadata extends Metadata> {
173
173
return true ;
174
174
}
175
175
public get canAbort ( ) {
176
- return this . status === 'paused' ;
176
+ return this . status === 'paused' || this . status === 'error' ;
177
177
}
178
178
179
179
/*************
@@ -239,8 +239,10 @@ export class ChunkUploader<TMetadata extends Metadata> {
239
239
break ;
240
240
} catch ( error ) {
241
241
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 {
244
246
this . status = 'error' ;
245
247
this . _error = error ;
246
248
if ( this . _onError ) this . _onError ( error ) ;
@@ -308,19 +310,28 @@ export class ChunkUploader<TMetadata extends Metadata> {
308
310
}
309
311
310
312
protected _waitForRetry ( ms : number ) {
311
- return new Promise < void > ( resolve => {
313
+ return new Promise < boolean > ( resolve => {
312
314
let isResolved = false ;
313
315
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 = ( ) => {
315
325
if ( isResolved ) return ;
316
326
isResolved = true ;
317
- this . _removeStatusChangedEventListener ( 'pausing' , handleResolve ) ;
318
- resolve ( ) ;
327
+ this . _removeStatusChangedEventListener ( 'pausing' , handlePause ) ;
328
+ clearTimeout ( timeoutId ) ;
329
+ resolve ( true ) ;
319
330
} ;
320
331
321
- setTimeout ( handleResolve , ms ) ;
332
+ const timeoutId = setTimeout ( handleTimeout , ms ) ;
322
333
323
- this . _addStatusChangedEventListener ( 'pausing' , handleResolve ) ;
334
+ this . _addStatusChangedEventListener ( 'pausing' , handlePause ) ;
324
335
} ) ;
325
336
}
326
337
0 commit comments