Возможный необработанный отказ от обещания (id: 0) TypeError: undefined не является объектом - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь реализовать логику входа в систему с использованием библиотек избыточности, thunk и навигации в собственном проекте реагирования (android), и я получаю необработанное отклонение обещания (id: 0): (оценивает '_this.props.navigation') Любая идея, что вызывает эту проблему или выход?

class AuthLoadingScreen extends React.Component {
  constructor() {
    super();
    this._bootstrapAsync();
  }

  _bootstrapAsync = async () => {
      this.props.getUserToken().then(() => {
        this.props.navigation.navigate(this.props.token.token !== null ? Devices' : 'UserAuth');
      }).catch(err => {
          this.setState({ err })
      })

  };

  render() {
    return (
      <View>
        <ActivityIndicator />
        <StatusBar barStyle="default" />
      </View>
    );
  }
}

// actionCreator.js
export const getUserToken = () => dispatch =>
 AsyncStorage.getItem('userToken')
        .then((data) => {
            dispatch(loading(false));
            dispatch(getToken(data));
        })
        .catch((err) => {
            dispatch(loading(false));
            dispatch(error(err.message || 'ERROR'));
        })

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Опора действия не возвращает обещание.

Кроме того, я бы посоветовал вам вызывать навигацию внутри действия с помощью response-navigation-redux-helpers .

Использование навигации в действиях.

export const getUserToken = () => dispatch => {
   AsyncStorage.getItem('userToken')
        .then((data) => {
            dispatch(loading(false));
            dispatch(getToken(data));
            dispatch(NavigationActions.navigate('successRoute'))
        })
        .catch((err) => {
            dispatch(loading(false));
            dispatch(error(err.message || 'ERROR'));
            dispatch(NavigationActions.navigate('failRoute'))
        });
}

Не рекомендуется возвращать обещание отправить.

0 голосов
/ 06 июня 2019

Вы звоните this._bootstrapAsync() внутри конструктора поместите его в componentDidMount

class AuthLoadingScreen extends React.Component {
  constructor() {
    super();

  }

componentDidMount() {
  this._bootstrapAsync();
}

....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...