当response.data是一个空数组时: - 未捕获(在promise中)TypeError:无法读取未定义的属性'data'

时间:2018-04-11 09:08:35

标签: javascript vue.js axios

当我在另一个使用一个axios请求时,我遇到了困难。特别是当response.data数组为空时。 每当response.data数组为空时,它都会给我这个错误: -

  

未捕获(承诺)TypeError:无法读取属性'data'   未定义

我知道很多人问过Uncaught而不是response.data 这是我的代码: -

axios.get(URL+'/xyz?variable='+variablevalue, headerconfig)
    .then(response => {
     this.tempvariable= (response.data);
    axios.get(URL+'/abc?variable='+variablevalue,headerconfig)
        .then((response) => {
          this.tempvariable = (response.data);
          //inside for loop by using this.tempvariable
          this.some_variable= this.anothervari.reduce((a,b) => Number(a) > Number(b) ? a : b);
        })
        .catch(e => {
            alert(e.response.data);
        })       

    })
    .catch(e => {
        alert(e.response.data);
    }) 

3 个答案:

答案 0 :(得分:1)

错误来自原始问题中缺失的第this.some_variable= this.anothervari.reduce((a,b) => Number(a) > Number(b) ? a : b);行。

在缩减为数组时,您需要为reduce函数指定一个起始值,因此请更改为:this.some_variable= this.anothervari.reduce((a,b) => Number(a) > Number(b) ? a : b, []);

答案 1 :(得分:0)

在返回任何响应之前,在请求设置期间可能发生错误,在这种情况下,响应对象未定义 https://github.com/axios/axios#handling-errors

答案 2 :(得分:-1)

如果axios没有收到服务器的响应,则错误对象没有响应对象。如果查看示例文档here,您可以看到在捕获错误时,它们会检查响应对象是否存在。在您的情况下,您的请求可能会失败而且从未到达服务器,因此您没有回复。在这种情况下,建议在访问之前查看响应对象是否存在,否则您将遇到异常。



    axios.get('/user/12345')
    .catch(function (error) {
    if (error.response) {
      // The request was made and the server responded with a status code
      // that falls out of the range of 2xx
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else if (error.request) {
      // The request was made but no response was received
      // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
      // http.ClientRequest in node.js
      console.log(error.request);
    } else {
      // Something happened in setting up the request that triggered an Error
      console.log('Error', error.message);
    }
    console.log(error.config);
  });