function isNetworkConnected(): Promise { if (Platform.OS === 'ios') { return new Promise(resolve => { const handleFirstConnectivityChangeIOS = isConnected => { NetInfo.isConnected.removeEventListener( 'change', handleFirstConnectivityChangeIOS, ); resolve(isConnected); }; NetInfo.isConnected.addEventListener( 'change', handleFirstConnectivityChangeIOS, ); }); } return NetInfo.isConnected.fetch(); } const networkMiddleware = createNetworkMiddleware(); export default function configureStore(): Promise { return new Promise((resolve: (arg: Store) => void) => { let nCalls = 0; let store; // resolver() will resolve the promise with the store // After rehydration and initial connection detection happens function resolver() { nCalls += 1; if (nCalls === 2) { resolve(store); } } store = createStore( rootReducer, undefined, compose( applyMiddleware(networkMiddleware), autoRehydrate(), ), ); isNetworkConnected().then(isConnected => { store.dispatch({ type: '@@network-connectivity/CONNECTION_CHANGE', payload: isConnected, }); resolver(); }); persistStore( store, { storage: AsyncStorage, debounce: 500, }, () => resolver(), ); }); }