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"
}





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