@@ -587,10 +587,18 @@ export class BaseProvider extends Provider implements EnsProvider {
587
587
588
588
const internalBlockNumber = this . _internalBlockNumber ;
589
589
590
- if ( maxAge > 0 && this . _internalBlockNumber ) {
591
- const result = await internalBlockNumber ;
592
- if ( ( getTime ( ) - result . respTime ) <= maxAge ) {
593
- return result . blockNumber ;
590
+ if ( maxAge > 0 && internalBlockNumber ) {
591
+ try {
592
+ const result = await internalBlockNumber ;
593
+ if ( ( getTime ( ) - result . respTime ) <= maxAge ) {
594
+ return result . blockNumber ;
595
+ }
596
+ } catch ( error ) {
597
+ // Don't null the dead (rejected) fetch, if it has already been updated
598
+ if ( this . _internalBlockNumber === internalBlockNumber ) {
599
+ this . _internalBlockNumber = null ;
600
+ }
601
+ throw error ;
594
602
}
595
603
}
596
604
@@ -620,6 +628,14 @@ export class BaseProvider extends Provider implements EnsProvider {
620
628
621
629
this . _internalBlockNumber = checkInternalBlockNumber ;
622
630
631
+ // Swallow unhandled exceptions; if needed they are handled else where
632
+ checkInternalBlockNumber . catch ( ( error ) => {
633
+ // Don't null the dead (rejected) fetch, if it has already been updated
634
+ if ( this . _internalBlockNumber === checkInternalBlockNumber ) {
635
+ this . _internalBlockNumber = null ;
636
+ }
637
+ } ) ;
638
+
623
639
return ( await checkInternalBlockNumber ) . blockNumber ;
624
640
}
625
641
@@ -629,7 +645,13 @@ export class BaseProvider extends Provider implements EnsProvider {
629
645
// Track all running promises, so we can trigger a post-poll once they are complete
630
646
const runners : Array < Promise < void > > = [ ] ;
631
647
632
- const blockNumber = await this . _getInternalBlockNumber ( 100 + this . pollingInterval / 2 ) ;
648
+ let blockNumber : number = null ;
649
+ try {
650
+ blockNumber = await this . _getInternalBlockNumber ( 100 + this . pollingInterval / 2 ) ;
651
+ } catch ( error ) {
652
+ this . emit ( "error" , error ) ;
653
+ return ;
654
+ }
633
655
this . _setFastBlockNumber ( blockNumber ) ;
634
656
635
657
// Emit a poll event after we have the latest (fast) block number
@@ -733,9 +755,9 @@ export class BaseProvider extends Provider implements EnsProvider {
733
755
// Once all events for this loop have been processed, emit "didPoll"
734
756
Promise . all ( runners ) . then ( ( ) => {
735
757
this . emit ( "didPoll" , pollId ) ;
736
- } ) ;
758
+ } ) . catch ( ( error ) => { this . emit ( "error" , error ) ; } ) ;
737
759
738
- return null ;
760
+ return ;
739
761
}
740
762
741
763
// Deprecated; do not use this
@@ -804,7 +826,7 @@ export class BaseProvider extends Provider implements EnsProvider {
804
826
get blockNumber ( ) : number {
805
827
this . _getInternalBlockNumber ( 100 + this . pollingInterval / 2 ) . then ( ( blockNumber ) => {
806
828
this . _setFastBlockNumber ( blockNumber ) ;
807
- } ) ;
829
+ } , ( error ) => { } ) ;
808
830
809
831
return ( this . _fastBlockNumber != null ) ? this . _fastBlockNumber : - 1 ;
810
832
}
@@ -815,7 +837,7 @@ export class BaseProvider extends Provider implements EnsProvider {
815
837
816
838
set polling ( value : boolean ) {
817
839
if ( value && ! this . _poller ) {
818
- this . _poller = setInterval ( this . poll . bind ( this ) , this . pollingInterval ) ;
840
+ this . _poller = setInterval ( ( ) => { this . poll ( ) ; } , this . pollingInterval ) ;
819
841
820
842
if ( ! this . _bootstrapPoll ) {
821
843
this . _bootstrapPoll = setTimeout ( ( ) => {
@@ -853,7 +875,7 @@ export class BaseProvider extends Provider implements EnsProvider {
853
875
854
876
if ( this . _poller ) {
855
877
clearInterval ( this . _poller ) ;
856
- this . _poller = setInterval ( ( ) => { this . poll ( ) } , this . _pollingInterval ) ;
878
+ this . _poller = setInterval ( ( ) => { this . poll ( ) ; } , this . _pollingInterval ) ;
857
879
}
858
880
}
859
881
0 commit comments