angularJS访问succes函数中承诺对象的属性

时间:2015-08-19 14:09:53

标签: angularjs http object promise angular-promise

我有一个问题,我真的无法理解。我正在使用一个基本的角度http.get来返回一个承诺:

getTask: function(id) {
    var promise = $http.get('http://localhost:9000/get/tasks/'+id).success(function(data) {
            return data;
        });
        return promise;
    }
TasksService.getTask($stateParams.id).then(function(success){
    $scope.task = success.data;
});

该任务具有我想要访问的属性,但它总是以不确定的方式返回。如果我这样做:

TasksService.getTask($stateParams.id).then(function(success){
    $scope.task = success.data;
    console.log($scope.task.deadline);
});

它未定义。你知道我如何访问这些属性,然后如何与我的控制器的其余部分共享它?

3 个答案:

答案 0 :(得分:0)

啊,.success.then的混淆再次发生。 Angular引入的这种微妙(并且在我看来,完全没有必要)的差异产生了很多问题。

这里的问题是.success返回原始承诺,在这方面,忽略您返回的data。换句话说,它“分支”并允许实现不影响链的其余部分的处理程序。

要修复,请使用.then

return $http.get(url).then(function(response) {
  return response.data;
});

<强>附录:

为了更好地理解,.success在概念上表现如下:

promise.success = function(fn) {
   promise.then(function(response) {
     fn(response.data, response.status, response.headers, config);
   });

   // the original promise is returned, not the .then promise
   return promise;
}

答案 1 :(得分:-1)

我建议你用Object.keys方法检查变量,如下所示:

 var obj = {};
 obj['key_1'] = 1;
 obj['key_2'] = 2;
 alert(Object.keys(obj));

此方法将告诉您很多有关变量属性和支持的方法的信息。

答案 2 :(得分:-1)

通过执行此操作进行修复:$scope.task.task[0].deadline