Browse Source

FileLoader: Incorrect error handling. (#22925)

* fix. FileLoader not showing correct error message when onLoad throws error

* fix. FileLoader not showing correct error message when onLoad throws error (code style fix)

* fix. call itemError before throwing err

* fix. move itemEnd into finally callback
Yiang 3 years ago
parent
commit
f2f55ddf79
1 changed files with 13 additions and 2 deletions
  1. 13 2
      src/loaders/FileLoader.js

+ 13 - 2
src/loaders/FileLoader.js

@@ -188,14 +188,21 @@ class FileLoader extends Loader {
 
 
 				}
 				}
 
 
-				this.manager.itemEnd( url );
-
 			} )
 			} )
 			.catch( err => {
 			.catch( err => {
 
 
 				// Abort errors and other errors are handled the same
 				// Abort errors and other errors are handled the same
 
 
 				const callbacks = loading[ url ];
 				const callbacks = loading[ url ];
+
+				if ( callbacks === undefined ) {
+
+					// When onLoad was called and url was deleted in `loading`
+					this.manager.itemError( url );
+					throw err;
+
+				}
+
 				delete loading[ url ];
 				delete loading[ url ];
 
 
 				for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
 				for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
@@ -206,6 +213,10 @@ class FileLoader extends Loader {
 				}
 				}
 
 
 				this.manager.itemError( url );
 				this.manager.itemError( url );
+
+			} )
+			.finally( () => {
+
 				this.manager.itemEnd( url );
 				this.manager.itemEnd( url );
 
 
 			} );
 			} );