开发者问题收集

为什么要用成功承诺来调用 catch 呢?

2020-02-12
116

我可能遇到了一些奇怪的事情,我向端点“/Login”发送了一个请求,它给了我很好的响应!

我做了我的事情,但由于某种原因,我看到一个警告,上面写着,

Unhandled Promise Rejection / typeError: undefined is not an object (evaluating '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个回答

error 是错误消息(拒绝消息)的字符串表示。但是当您说 error.response.data

  .catch(error => {
    alert('catched!!'); // it's appear :)
    this.setState({error: error, loading: false});
    reactotron.error(error.response.data);
  });
时,您会将其视为一个对象
Addis
2020-02-12

如果在当时的块中遇到错误,则可以调用捕获量。检查您然后阻止任何可能的错误。这可能就是为什么即使承诺返回成功也被调用的原因。

879358874
Renji Joseph Sabu Niravath
2020-02-12