I just want to understand this behavior of the JavaScript engine. I have an event listener, which calls handler after event. In this handler I refresh my token and put it in the redux. On the first call all is OK, but when handler calls again, I have token refreshing error, because it sends old refresh token, not the same as in redux.
import React, {useEffect, useState} from 'react';
import {useSelector, useDispatch} from 'react-redux';
import {setAuthData} from '../redux/actions/actions';
const Distributor = props => {
const dispatch = useDispatch();
const auth = useSelector(store => store.Auth); // auth from redux
useEffect(() => { // setting my event listener
AppState.addEventListener('change', handleAppStateChange);
return () => {
console.log('distributor unmount');
AppState.removeEventListener('change', handleAppStateChange);
};
}, []);
const handleAppStateChange = nextAppState => { // my handler
if (nextAppState === 'active') {
getProfileData()
}
};
async function getProfileData() { // function that processes refreshing token
try {
const responseFromAuth = await refreshToAccessToken(
auth.refresh_token,
).then(res => res.json());
if (responseFromAuth.access_token) {
dispatch(setAuthData(responseFromAuth));
} else {
console.log(
`Error getting access token from refresh in distributor: ${
responseFromAuth.error_description
}`,
);
}
} catch (e) {
console.log(`Error getting profile data: ${e}`);
}
}
}