Зачем ловить призванное с успехом обещание? - PullRequest
0 голосов
/ 12 февраля 2020

У меня, может быть, происходят странные вещи, я отправляю запрос в конечную точку "/ Login", и он дает мне хороший ответ!

, и я делаю свои вещи, но по какой-то причине я вижу предупреждение, что говорит:

Необработанное обещание Отклонение / typeError: undefined не является объектом (оценивается как «error.response.data»)

Если у кого-нибудь есть объяснение этому?

Фрагмент кода

signIn = data => {
    this.setState({loading: true});
    API.post('/login', data)
      .then(response => {
        let {
          data: {
            data: {
              response: {token},
            },
          },
        } = response;
        this.setState({loading: false});
        reactotron.log('response', response);
        reactotron.log(token);
        deviceStorage.saveKey('id_token', token);
      })
      .catch(error => {
        alert('catched!!'); // it's appear :)
        this.setState({error: error.response.data, loading: false});
        reactotron.error(error.response.data);
      });
  };

= В этой функции была ошибка ~ _ ~!

почему вы получаете ошибку?

_deviceStorage.default.saveKey is not a function

import { AsyncStorage } from '@react-native-community/async-storage';
import reactotron from 'reactotron-react-native';

const deviceStorage = {
  // our AsyncStorage functions will go here :)
  saveItem= async(key, value)=>{
    try {
      await AsyncStorage.setItem(key, value);
    } catch (error) {
      reactotron.log('AsyncStorage Error: ' + error.message);
    }
  }
};

export default deviceStorage;

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

error - это строковое представление сообщения об ошибке (сообщение об отказе). Но вы относитесь к нему как к объекту, когда говорите error.response.data

  .catch(error => {
    alert('catched!!'); // it's appear :)
    this.setState({error: error, loading: false});
    reactotron.error(error.response.data);
  });
1 голос
/ 12 февраля 2020

Перехват может быть вызван, если в блоке then обнаружена ошибка. Проверьте ваш блок на возможные ошибки. Это может быть причиной того, что catch вызывается, даже если обещание вернулось.

const promise1 = new Promise(function(resolve, reject) {
  resolve("resp");
});

promise1.then(function(resp) {
  console.log(resp);
  throw 'error'
}).catch(function(error) {
  console.error(error);
});
...