离子控制器和服务:“ TypeError:...不是函数”

旺吉米

我正在开发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文件。

任何帮助将非常感激。

尼科斯特

就像TJ Crowder所说的那样,为了使用“ then”(异步调用),您必须从服务中返回一个Promise,之后才能在您的控制器中获取:

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)拒绝承诺(而error是可选的错误消息/对象)。

这是另一个很好的链接,它帮助我获得了带有角度承诺的异步编程的概念:$ q.defer

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章