【问题标题】:angularJS access properties of promised object in succes functionangularJS在成功函数中访问promise对象的属性
【发布时间】:2015-11-12 21:28:59
【问题描述】:

我有一个问题,我真的无法理解。我正在使用一个基本的角度 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);
});

未定义。您知道我如何访问这些属性以及如何与我的控制器的其余部分共享它吗?

【问题讨论】:

  • 显示getTask的代码
  • 我无法理解您的问题...您是在问为什么您返回的数据未定义?
  • 用我的 get 任务更新了问题。我的问题是为什么我的,例如,$scope.task.deadline 是未定义的。因为它是对象的属性
  • 刚刚找到:应该是。 $scope.task.task[0].deadline

标签: angularjs http object promise angular-promise


【解决方案1】:

啊,.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;
}

【讨论】:

    【解决方案2】:

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

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

    这个方法会告诉你很多关于变量属性和支持的方法。

    【讨论】:

    • 想知道为什么人们投票反对。用户最终找到了解决方案$scope.task.task[0].deadline,并且确实通过Object.keys($scope.task) 和进一步检查,他最终可以更快地找到解决方案。
    【解决方案3】:

    通过这样做修复它:$scope.task.task[0].deadline

    【讨论】:

    • 感谢您发布此问题的答案!在 Stack Overflow 上只回答 are discouraged 的代码,因为没有上下文的代码转储无法解释解决方案如何或为什么会起作用,使得原始发布者(或任何未来的读者)无法理解其背后的逻辑。请编辑您的问题并包含对您的代码的解释,以便其他人可以从您的回答中受益。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多