我正在开发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] 删除。
我来说两句