【问题标题】:Ionic1 Factory $http request returning promiseIonic1 Factory $http 请求返回承诺
【发布时间】:2017-07-17 20:13:49
【问题描述】:

我有一个适用于我的 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 中返回的 json。如果我在控制器中调用 API,我可以 ng-repeat 没有问题的集合,但是现在它在服务中,它被包装在这个“承诺”中,我不确定如何输出集合。

我试过了

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

但我得到了错误

[ngRepeat:iexp] 'item 形式的预期表达式 collection[track by id]'但得到'categories as category'。

我认为这是不理解承诺的情况。

【问题讨论】:

    标签: javascript angularjs ionic-framework


    【解决方案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);
    
    })
    

    【讨论】:

    • console.log(response) 应该控制你想要的输出。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 2017-05-15
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      相关资源
      最近更新 更多