Ionic Controller and Service: "TypeError:... is not a function"

Ionic Controller and Service: "TypeError:... is not a function"

我正在开发 Ionic 的移动应用程序并被错误卡住了

TypeError: t.getCases(...).then is not a function

以下是我关注的控制器和服务:

服务

starter.services.factory('appData', function() {

  return {
      getCases: function() {

        var cases =[ 
          {case_id: 1, description: 'headache'},
          {case_id: 2, description: 'fever'},
          {case_id: 3, description: 'stomachache'}
        ];

        return cases;
    }
  } 

})

控制器

starter.controllers.controller('mainViewCtrl', function($scope, appData) {

  appData.getCases().then(function(data){
      $scope.cases = data.cases;
   });  

  console.log("mainViewCtrl completed");
})

请注意,在构建包文件之前,我 运行 合并 gulp 脚本和 "uglify" 所有 JS 文件。

如有任何帮助,我们将不胜感激。

正如T.J. Crowder所说,为了使用"then"(异步调用),你必须return服务的承诺,之后能够在你的控制器中获取:

starter.services.factory('appData', function($q) {

  return {
      getCases: function() {

        var deferred = $q.defer();

        var cases =[ 
          {case_id: 1, description: 'headache'},
          {case_id: 2, description: 'fever'},
          {case_id: 3, description: 'stomachache'}
        ];

        //attach data to deferred object
        deferred.resolve(cases);

       //return promise to be catched with "then"
       return deferred.promise;

    }
  } 

})

如果您可能想要 return 一个错误作为回调,您可以通过调用 deferred.reject(error) 来拒绝承诺(而错误是一个可选的错误 message/object)。

这是另一个好东西 link,它帮助我在 angular 中获得了带有承诺的异步编程的概念: $q.defer