Ionic1工厂$ http请求返回承诺

时间:2017-07-17 20:13:50

标签: javascript angularjs ionic-framework

我有一个能够与我的API端点一起使用的ionic1应用程序。

我已经创建了一个随叫随到的服务类别。

.factory('expenses', function($http) {

    var expenseCategories = [];

    return {

        getCategories: function(){

            return $http.get('URL_HERE').then(function(response){
                expenseCategories = response.data.data[0];
                return expenseCategories.categories;
            });

        }

    }

})

我在控制器中调用该服务

.controller('expenseCategoryCtrl', function($scope, $state, expenses) {

  $scope.categories = expenses;
  $scope.data = $scope.categories.getCategories();
  console.log($scope.data);

})

当控制台记录响应时,它会从API返回一个promise,而不是我常用的json。如果我在控制器中调用API,我可以毫无问题地重复该集合,但是现在它已经包含在这个"承诺"中的服务中。而且我不确定如何输出集合。

Screenshot of Console Log

我已经尝试了

<li class="item item-toggle" ng-repeat="categories as category">
         {{ category }}
      </li>

但我收到了错误

  

[ngRepeat:iexp]&#39; item 形式的预期表达式   集合 [通过 id跟踪]&#39;但是将类别作为类别&#39;。

我认为这是一个不理解承诺的案例。

2 个答案:

答案 0 :(得分:1)

希望这会奏效:

.controller('expenseCategoryCtrl', function($scope, $state, expenses) {

  $scope.categories = expenses;
  $scope.data = $scope.categories.getCategories().then(function(response){
console.log(response);
},function(error){
console.log(error);
});
  console.log($scope.data);

})

答案 1 :(得分:0)

异步操作并不像你想的那样工作。完成承诺后,您将获得数据。因此,在getCategories方法上,您可以设置.then函数,它会调用successFn一个承诺,否则会调用errorFn错误。

$scope.categories.getCategories().then(function successFn(data){
  $scope.data = data
}, function errorFn(error){ console.log(error) });

在控制台中,您获得的是$http服务返回的承诺对象,因为您直接将承诺分配给$scope.data

相关问题