为什么赶上成功承诺来追赶?

时间:2020-02-12 18:00:53

标签: javascript reactjs react-native promise axios

我可能发生了一些奇怪的事情,我向端点“ / 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 个答案:

答案 0 :(得分:3)

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

时,您就好像它是一个对象一样对待它
  .catch(error => {
    alert('catched!!'); // it's appear :)
    this.setState({error: error, loading: false});
    reactotron.error(error.response.data);
  });

答案 1 :(得分:1)

如果在then块中遇到错误,则可以调用catch。检查您的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);
});