2017-01-23 3 views
1

Я использую React Native с Redux. Следующий код используется для создания хранилища Redux и использует AsyncStorage для проверки входа пользователя в систему, проверяя наличие authToken.Невозможно прочитать значение AsyncStorage при запуске приложения React Native

import {createStore} from 'redux'; 
import {persistStore} from 'redux-persist'; 

async function getAuthToken() { 
    return await AsyncStorage.getItem('authToken'); 
} 

export function createStore(onCompletion:() => void):any { 
    ... 

    const store = createStore(
    reducer, 
    { 
     auth: { 
     authenticated: !!getAuthToken() 
     } 
    }, 
    enhancer); 

    persistStore(store, { 
    storage: AsyncStorage, 
    }, 
    onCompletion); 
} 

Создание магазина:

export default class App extends Component { 

    constructor(props) { 
    super(props); 
    this.state = { 
     store: createStore(...), 
    }; 
    } 

    render() { 
    return (
     <Provider store={this.state.store}> 
     <AppNavigator /> 
     </Provider> 
    ); 
    } 
} 

Значение authToken некорректной устанавливается один раз входа пользователя в систему, и удаляется, когда пользователь выходит из системы. Но authToken не сохраняется, после того как приложение перезагрузилось. Первый вызов getAuthToken всегда возвращает это значение нежелательной из AsyncStorage:

{_45: 0, _81: 0, _65: нуль, _54: нулевой}

Почему это могло случиться?

ответ

0

Теперь вы возвращаете обещание от AsyncStorage, вам нужно вернуть значение токена. Попробуйте:

async function getAuthToken() { 
    return await AsyncStorage.getItem('authToken').then((token) => token); 
} 
+0

Это не работает для меня, и я все равно получаю тот же результат. Я понял, что «ожидание» уже синхронно. Я также использую один и тот же шаблон ожидания, чтобы синхронно извлекать authToken из AsyncStorage и отправлять в HTTP-заголовок, который работает. – Simian

Смежные вопросы