@@ -23,6 +23,10 @@ const createState = (): State => {
2323 return new State ( _configuration ) ;
2424} ;
2525
26+ // Track ongoing requests
27+ let isRequestInProgress = false ;
28+ let requestQueue : ( ( state : Types . NetInfoState ) => void ) [ ] = [ ] ;
29+
2630/**
2731 * Configures the library with the given configuration. Note that calling this will stop all
2832 * previously added listeners from being called again. It is best to call this right when your
@@ -74,7 +78,23 @@ export function refresh(): Promise<Types.NetInfoState> {
7478 if ( ! _state ) {
7579 _state = createState ( ) ;
7680 }
77- return _state . _fetchCurrentState ( ) ;
81+
82+ // If a request is already in progress, return a promise that will resolve when the current request finishes
83+ if ( isRequestInProgress ) {
84+ return new Promise ( ( resolve ) => {
85+ requestQueue . push ( resolve ) ;
86+ } ) ;
87+ }
88+
89+ isRequestInProgress = true ;
90+
91+ return _state . _fetchCurrentState ( ) . then ( ( result ) => {
92+ requestQueue . forEach ( ( resolve ) => resolve ( result ) ) ;
93+ requestQueue = [ ] ;
94+ return result ;
95+ } ) . finally ( ( ) => {
96+ isRequestInProgress = false ;
97+ } ) ;
7898}
7999
80100/**
@@ -123,7 +143,8 @@ export function useNetInfo(
123143 } ) ;
124144
125145 useEffect ( ( ) : ( ( ) => void ) => {
126- return addEventListener ( setNetInfo ) ;
146+ const unsubscribe = addEventListener ( setNetInfo ) ;
147+ return ( ) => unsubscribe ( ) ;
127148 } , [ ] ) ;
128149
129150 return netInfo ;
@@ -165,7 +186,12 @@ export function useNetInfoInstance(
165186 } , [ isPaused , configuration ] ) ;
166187
167188 const refresh = useCallback ( ( ) => {
168- networkInfoManager && networkInfoManager . _fetchCurrentState ( ) ;
189+ if ( networkInfoManager && ! isRequestInProgress ) {
190+ isRequestInProgress = true ;
191+ networkInfoManager . _fetchCurrentState ( ) . finally ( ( ) => {
192+ isRequestInProgress = false ;
193+ } ) ;
194+ }
169195 } , [ networkInfoManager ] ) ;
170196
171197 return {
0 commit comments