AngularJS $ http .then语法差异导致TypeError

时间:2017-11-04 11:35:16

标签: javascript angularjs

我正在尝试从getAllDatas方法获取数据。

这样可以正常运行而没有任何错误:

var getAlldatas = function ($http) {
    var getuser = function (username) {
        return $http.get("https://api.github.com/users/" + username).then(function (response) {
            return response.data;
        });
    };

抛出错误:

 var getAlldatas = function ($http) {
     var getuser = function (username) {
         var pro = $http.get("https://api.github.com/users/" + username).then(getThis);

         var getThis = function (response) {
             return response.data;
         };

         return pro;
     };

我是如何得到第二个

的以下错误消息
  

angular.js:10071 TypeError:无法读取未定义的属性'protocol'

第二个与第一个有什么不同,为什么会抛出错误?
为什么两者都不是以类似的方式表现?

3 个答案:

答案 0 :(得分:4)

JavaScript的工作原理。函数声明悬挂到代码页的顶部,而初始化不是。

Reference - 感谢@Andreas

您正在使用之后定义getThis

答案 1 :(得分:2)

你的第二个定义分为

 var getuser = function (username) {
    var pro, getThis;
    pro = $http.get("https://api.github.com/users/" + username).then(getThis);
    getThis = function (response) {
        return response.data;
    };
    return pro;
};

getThis在为undefined变量分配值时只有pro。出现此问题是由于立即.then调用并在工作中使用undefined的回调参数。下一个代码修复了问题:

 var getuser = function (username) {
    var pro = $http.get("https://api.github.com/users/" + username)
              .then(function(result) { getThis(result); });
    var getThis = function (response) {
        return response.data;
    };
    return pro;
};

在这种情况下,回调参数不是undefined,它将正确传递给AngularJS,getThis变量将有时间获取它的值。

答案 2 :(得分:1)

像这样使用:

  var getuser = function (username) {
  var pro = $http.get("https://api.github.com/users/" + username)
          .then(function(getdata) { getThis(getdata); });
  var getThis = function (response) {
    return response.data;
  };
  return pro;
  };