AngularJs错误无法读取属性';然后';未定义的
这是模块AngularJs错误无法读取属性';然后';未定义的,angularjs,Angularjs,这是模块 (function(){ /** * app Module * * Description */ angular.module('app',[]); })(); 我有这项服务 (function(){ 'use strict'; angular .module('app') .factory('homeservice',homeservice); homeservice.$inject = ['$http'
(function(){
/**
* app Module
*
* Description
*/
angular.module('app',[]);
})();
我有这项服务
(function(){
'use strict';
angular
.module('app')
.factory('homeservice',homeservice);
homeservice.$inject = ['$http']
function homeservice($http){
var service = {
test : test
}
return service;
/**
* get articles
* @return {[type]} [description]
*/
function test(){
$http.get('/test')
.then(testSuccess)
.catch(testError)
function testSuccess(response){
return response.data;
//console.log(response.data) this line prints data to console
}
function testError(error){
return error;
}
}
}
})();
这是我调用函数的控制器
(function(){
angular.module('app')
.controller('HomeController',HomeController);
HomeController.$inject = ['homeservice']
function HomeController(homeservice) {
var vm = this;
test();
function test(){
homeservice.test().then(function(response){
console.log(response);
});
}
}
})();
当我调用控制器中的方法时,我不断收到错误-无法读取未定义的的属性“then”。我以前用过这种方法,它工作正常
回答
function test(){
return $http.get('/test') // return was missing here
.then(testSuccess)
.catch(testError)
function testSuccess(response){
return response.data;
//console.log(response.data) this line prints data to console
}
function testError(error){
return error;
}
}
我在$http.get('/test')处丢失了return
$http.get('/test')
.success(successFunction)
.error(errorFunction);
至少对于<1.4.8的版本来说是这样
对于>1.4.8的版本,请尝试以下操作:
$http.get('/test')
.then(
function(response) { }, // success
function(response) { } // failure
);
这个
homeservice.test().then(function(response){ ... });
假定test
方法应该返回一个承诺。它返回未定义的
,这就是错误所说的
应该是
/**
* get articles
* @return {[type]} [description]
*/
function test(){
return $http.get('/test')
.then(testSuccess)
.catch(testError)
...
}
测试函数需要返回
$http
承诺:
function test(){
͟r͟e͟t͟u͟r͟n͟ $http.get('/test')
//^^^^^^ ---------------------RETURN the $http promise
.then(testSuccess)
.catch(testError)
function testSuccess(response){
return response.data;
}
function testError(error){
̶r̶e̶t̶u̶r̶n̶ ̶e̶r̶r̶o̶r̶;̶
//throw to chain rejection
throw error;
}
}
成功和错误处理程序中的return
语句不向父函数返回值。将return
语句放在层次结构的每个级别
AngularJS旧版本的拒绝重新抛出
以前的版本(您是否定义了模块?@Sajeetharan是模块已定义,忘记添加它。我使用的是AngularJs版本1.6.0,但即使我尝试此操作,它也会引发另一个错误:$http.get(…).success不是一个函数。我将其更改为包含>1.4.8的语法,看看是否有任何更改。这并不能解决我的问题,因为我的逻辑是相同的。不,它不应该。早在1.4.8之前,
success
就被弃用了。当我从工厂发出console.log响应时,它会将数据输出到控制台。但控制器抛出错误。不确定您要执行的操作平均值。问题中的代码未命中return
语句,这就是您得到无法读取未定义的错误的属性“then”的原因。如果您在应用此答案后继续得到错误,请提供一个plunk,以便问题可以被复制。
function test(){
͟r͟e͟t͟u͟r͟n͟ $http.get('/test')
//^^^^^^ ---------------------RETURN the $http promise
.then(testSuccess)
.catch(testError)
function testSuccess(response){
return response.data;
}
function testError(error){
̶r̶e̶t̶u̶r̶n̶ ̶e̶r̶r̶o̶r̶;̶
//throw to chain rejection
throw error;
}
}
function onRejection(error){
̶r̶e̶t̶u̶r̶n̶ ̶e̶r̶r̶o̶r̶;̶
console.log(error.status);
//throw to chain rejection
return $q.reject(error);
}