@@ -537,15 +537,26 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
537537 return loadImage ( tileImage , [ url ] ) ;
538538 }
539539
540- abortTileLoading ( tileImage ) {
540+ abortTileLoading ( tileImage , tileInfo ) {
541+ if ( tileInfo && tileInfo . id !== undefined ) {
542+ this . removeTileLoading ( tileInfo ) ;
543+ }
541544 if ( ! tileImage ) return ;
542545 tileImage . onload = falseFn ;
543546 tileImage . onerror = falseFn ;
544547 tileImage . src = emptyImageUrl ;
545548 }
546549
547550 onTileLoad ( tileImage , tileInfo ) {
551+ this . removeTileLoading ( tileInfo ) ;
548552 this . _tileQueue . push ( { tileInfo : tileInfo , tileData : tileImage } ) ;
553+ this . setToRedraw ( ) ;
554+ }
555+
556+ removeTileLoading ( tileInfo ) {
557+ delete this . tilesLoading [ tileInfo . id ] ;
558+ // need to setToRedraw to let tiles blocked by loadingLimit continue to load
559+ this . setToRedraw ( ) ;
549560 }
550561
551562 _consumeTileQueue ( ) {
@@ -588,7 +599,6 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
588599 if ( ! this . layer ) {
589600 return ;
590601 }
591- const id = tileInfo [ 'id' ] ;
592602 if ( ! this . tilesInView ) {
593603 // removed
594604 return ;
@@ -608,7 +618,7 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
608618 // let user update tileImage in listener if needed
609619 tileImage = e . tileImage ;
610620 this . resetTileLoadTime ( tileImage ) ;
611- delete this . tilesLoading [ id ] ;
621+ this . removeTileLoading ( tileInfo ) ;
612622 this . _addTileToCache ( tileInfo , tileImage ) ;
613623 this . setToRedraw ( ) ;
614624 }
@@ -626,12 +636,14 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
626636 if ( tileRetryCount > tileImage . onerrorTick ) {
627637 tileImage . onerrorTick ++ ;
628638 this . _fetchImage ( tileImage , tileInfo ) ;
639+ this . removeTileLoading ( tileInfo ) ;
629640 return ;
630641 }
631642 const errorUrl = this . layer . options [ 'errorUrl' ] ;
632643 if ( errorUrl ) {
633644 if ( ( tileImage instanceof Image ) && tileImage . src !== errorUrl ) {
634645 tileImage . src = errorUrl ;
646+ this . removeTileLoading ( tileInfo ) ;
635647 return ;
636648 } else {
637649 tileImage = new Image ( ) ;
@@ -642,7 +654,7 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
642654 this . abortTileLoading ( tileImage , tileInfo ) ;
643655
644656 tileImage . loadTime = 0 ;
645- delete this . tilesLoading [ tileInfo [ 'id' ] ] ;
657+ this . removeTileLoading ( tileInfo ) ;
646658 this . _addTileToCache ( tileInfo , tileImage ) ;
647659 this . setToRedraw ( ) ;
648660 /**
@@ -955,7 +967,7 @@ class TileLayerCanvasRenderer extends CanvasRenderer {
955967 this . abortTileLoading ( tile . image , tile . info ) ;
956968 }
957969 this . deleteTile ( tile ) ;
958- delete this . tilesLoading [ i ] ;
970+ this . removeTileLoading ( tile . info ) ;
959971 }
960972 }
961973 for ( const i in this . tilesInView ) {
0 commit comments