Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save andreymakaroff/215defcff2ecfcdae00ccb0e3e91959f to your computer and use it in GitHub Desktop.
Save andreymakaroff/215defcff2ecfcdae00ccb0e3e91959f to your computer and use it in GitHub Desktop.
import {AsyncStorage, Alert} from 'react-native';
import axios from 'axios';
import _ from 'lodash';
import {StackActions, NavigationActions} from 'react-navigation';
import {navigatorRef} from '../../App';
import {CHOICE_PLAN_SCREEN, AUTHGSCREEN} from '../../navigation/navConstants';
import {LINKS} from './apiConstants';
const SUBSCRIPTION_ERROR = 'Subscription error';
export const httpRequest = async (url, params, count) => {
const data = (params && params.data) ? params.data : null;
const method = (params && params.method) ? params.method : 'POST';
const accessToken = (params && params.accessToken) ? params.accessToken : true;
const needSubscription = (params && params.needSubscription === false) ? params.needSubscription : true;
const userData = await AsyncStorage.getItem('userData');
const parseData = (userData && userData.length) ? JSON.parse(userData) : {};
const token = (accessToken && parseData && parseData.token) ? parseData.token : null;
console.log('http', url, data);
return axios({
method,
url: `${LINKS.DOMAIN}${url}`,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json; charset=utf-8',
'X-Requested-With': 'XMLHttpRequest',
Authorization: `Bearer ${token}`,
},
data,
}).then(async response => {
return response.data;
}).catch(async err => {
console.warn('SERVER ERROR:', err.message, url, data, err);
if (err.message === 'Network Error') {
const counter = count || 0;
if (counter < 7) {
const requestTryMore = () => {
return new Promise(resolve => {
setTimeout(async () => {
const ourRequest = await httpRequest(url, params, counter + 1);
resolve(ourRequest)
}, count*1000 + 100)
});
};
return await requestTryMore();
}
}
if (err.response && err.response.status === 401) {
Alert.alert(
'Authorization error',
'',
[{
text: 'OK', onPress: () => {
}, style: 'cancel'
}],
{cancelable: false}
);
await AsyncStorage.removeItem('userData');
navigatorRef.dispatch(NavigationActions.navigate({routeName: AUTHGSCREEN}));
}
return err;
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment