Expo, React Native AsyncStorage не разрешает обещание

AsyncStorage от React Native никогда не выполняет своего обещания. Вот код:

import {Component} from 'react';
import React from 'react';
import {AsyncStorage} from 'react-native';


export default class Session extends Component {

    componentDidMount() {
        console.info('foo');
        debugger; // This hits
        AsyncStorage.getItem('token').then(() => {
            console.info('baz');
            debugger; // This never hits
        }).catch(() => {
            console.info('catch');
            debugger; // This never hits
        });
        debugger; // This hits
        console.info('bar');
    }


    render() {
        return (
            <React.Fragment>
                {this.props.children}
            </React.Fragment>
        );
    }
}

Метод componentDidMount регистрирует «foo» и «bar», но не «baz» или «catch».

Я запускаю это на Android-эмуляторе GenyMotion.

Поведение одинаково вне зависимости от того, нахожусь я в режиме удаленной отладки или нет.

Вот мой пакет package.json deps:

"dependencies": {
  "@expo/samples": "2.1.1",
  "eslint-plugin-react-native": "^3.2.1",
  "expo": "29.0.0",
  "prop-types": "^15.6.2",
  "ramda": "^0.25.0",
  "react": "16.3.1",
  "react-connect-context": "^1.1.0",
  "react-native": "https://github.com/expo/react-native/archive/sdk-29.0.0.tar.gz",
"react-native-elements": "^1.0.0-beta5",
"react-navigation": "^2.9.3",
"styled-components": "^3.4.2"

}

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
0
0
502
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это существующая проблема с React Native. Мы столкнулись с той же проблемой несколько месяцев назад. Поскольку мы использовали Expo, мы решили использовать Expo SecureStore вместо AsyncStorage, и это соответствовало нашим требованиям.

Более подробную информацию по проблеме можно найти здесь. В названии проблемы указано, что это происходит только при удаленной отладке, но если вы посмотрите на комментарии, это произойдет независимо от того, удаленная отладка или нет.

Другие вопросы по теме