提交 0fddd786 编写于 作者: T Takahiro

Fix FileLoader duplicate request issues

上级 b83561c0
...@@ -45,9 +45,11 @@ Object.assign( FileLoader.prototype, { ...@@ -45,9 +45,11 @@ Object.assign( FileLoader.prototype, {
if ( loading[ url ] !== undefined ) { if ( loading[ url ] !== undefined ) {
loading[ url ].push( function () { loading[ url ].push( {
scope.load( url, onLoad, onProgress, onError ); onLoad: onLoad,
onProgress: onProgress,
onError: onError
} ); } );
...@@ -150,6 +152,14 @@ Object.assign( FileLoader.prototype, { ...@@ -150,6 +152,14 @@ Object.assign( FileLoader.prototype, {
loading[ url ] = []; loading[ url ] = [];
loading[ url ].push( {
onLoad: onLoad,
onProgress: onProgress,
onError: onError
} );
var request = new XMLHttpRequest(); var request = new XMLHttpRequest();
request.open( 'GET', url, true ); request.open( 'GET', url, true );
...@@ -160,9 +170,17 @@ Object.assign( FileLoader.prototype, { ...@@ -160,9 +170,17 @@ Object.assign( FileLoader.prototype, {
Cache.add( url, response ); Cache.add( url, response );
var callbacks = loading[ url ];
delete loading[ url ];
if ( this.status === 200 ) { if ( this.status === 200 ) {
if ( onLoad ) onLoad( response ); for ( var i = 0, il = callbacks.length; i < il; i ++ ) {
if ( callbacks[ i ].onLoad ) callbacks[ i ].onLoad( response );
}
scope.manager.itemEnd( url ); scope.manager.itemEnd( url );
...@@ -173,46 +191,50 @@ Object.assign( FileLoader.prototype, { ...@@ -173,46 +191,50 @@ Object.assign( FileLoader.prototype, {
console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );
if ( onLoad ) onLoad( response ); for ( var i = 0, il = callbacks.length; i < il; i ++ ) {
if ( callbacks[ i ].onLoad ) callbacks[ i ].onLoad( response );
}
scope.manager.itemEnd( url ); scope.manager.itemEnd( url );
} else { } else {
if ( onError ) onError( event ); for ( var i = 0, il = callbacks.length; i < il; i ++ ) {
if ( callbacks[ i ].onError ) callbacks[ i ].onError( event );
}
scope.manager.itemEnd( url ); scope.manager.itemEnd( url );
scope.manager.itemError( url ); scope.manager.itemError( url );
} }
// Clean up duplicate requests. }, false );
request.addEventListener( 'progress', function ( event ) {
var callbacks = loading[ url ]; var callbacks = loading[ url ];
for ( var i = 0; i < callbacks.length; i ++ ) { for ( var i = 0, il = callbacks.length; i < il; i ++ ) {
callbacks[ i ]( response ); if ( callbacks[ i ].onProgress ) callbacks[ i ].onProgress( event );
} }
delete loading[ url ];
}, false ); }, false );
if ( onProgress !== undefined ) { request.addEventListener( 'error', function ( event ) {
request.addEventListener( 'progress', function ( event ) {
onProgress( event );
}, false ); var callbacks = loading[ url ];
} for ( var i = 0, il = callbacks.length; i < il; i ++ ) {
request.addEventListener( 'error', function ( event ) { if ( callbacks[ i ].onError ) callbacks[ i ].onError( event );
if ( onError ) onError( event ); }
scope.manager.itemEnd( url ); scope.manager.itemEnd( url );
scope.manager.itemError( url ); scope.manager.itemError( url );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册