离子控制器和服务:;类型错误:..不是函数”;

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

本文关键字:函数 错误 类型 服务 控制器      更新时间:2023-09-26

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

TypeError:t.getCases(…).then不是函数

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

服务

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"(异步调用),您必须从服务返回一个承诺,然后才能在控制器中获取:

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;
    }
  } 
})

如果您可能想返回一个错误作为回调,您可以通过调用deferred.reject(error)来拒绝promise(而error是一个可选的错误消息/对象)。

这里有另一个很好的链接,它帮助我获得了异步编程的概念,并以角度进行了承诺:$q.推迟