@@ -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