@@ -23,6 +23,10 @@ const createState = (): State => {
23
23
return new State ( _configuration ) ;
24
24
} ;
25
25
26
+ // Track ongoing requests
27
+ let isRequestInProgress = false ;
28
+ let requestQueue : ( ( state : Types . NetInfoState ) => void ) [ ] = [ ] ;
29
+
26
30
/**
27
31
* Configures the library with the given configuration. Note that calling this will stop all
28
32
* 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> {
74
78
if ( ! _state ) {
75
79
_state = createState ( ) ;
76
80
}
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
+ } ) ;
78
98
}
79
99
80
100
/**
@@ -123,7 +143,8 @@ export function useNetInfo(
123
143
} ) ;
124
144
125
145
useEffect ( ( ) : ( ( ) => void ) => {
126
- return addEventListener ( setNetInfo ) ;
146
+ const unsubscribe = addEventListener ( setNetInfo ) ;
147
+ return ( ) => unsubscribe ( ) ;
127
148
} , [ ] ) ;
128
149
129
150
return netInfo ;
@@ -165,7 +186,12 @@ export function useNetInfoInstance(
165
186
} , [ isPaused , configuration ] ) ;
166
187
167
188
const refresh = useCallback ( ( ) => {
168
- networkInfoManager && networkInfoManager . _fetchCurrentState ( ) ;
189
+ if ( networkInfoManager && ! isRequestInProgress ) {
190
+ isRequestInProgress = true ;
191
+ networkInfoManager . _fetchCurrentState ( ) . finally ( ( ) => {
192
+ isRequestInProgress = false ;
193
+ } ) ;
194
+ }
169
195
} , [ networkInfoManager ] ) ;
170
196
171
197
return {
0 commit comments