这是模块
(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);
});
}
}
})();
我一直收到错误 - 无法读取属性'然后'当我在控制器中调用方法时,未定义 我之前使用过这种方式,它运作正常。
ANSWER
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')
缺少返回答案 0 :(得分:4)
此
homeservice.test().then(function(response){ ... });
假设test
方法应该返回一个承诺。并返回undefined
,这就是错误所说的内容。
应该是
/**
* get articles
* @return {[type]} [description]
*/
function test(){
return $http.get('/test')
.then(testSuccess)
.catch(testError)
...
}
答案 1 :(得分:1)
测试功能需要返回 $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
语句放在层次结构的每个级别。
以前(版本< 1.6),来自承诺的onFulfilled
或onRejection
处理程序的错误thrown也会传递给$exceptionHandler()
(在除了以错误为理由拒绝承诺之外)。
要避免控制台中出现旧版本的错误消息,请通过返回被拒绝的承诺重新抛出:
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);
}
新手程序员的一个常见问题是被拒绝承诺错误转换以履行承诺。重要的是从拒绝处理程序中重新抛出错误。
当函数省略return statement时,该函数返回值undefined
,错误地转换拒绝到已履行的承诺,该承诺解析为{{{ 1}}。
来自文档:
由于e13eea,承诺的
undefined
或onFulfilled
处理程序抛出的错误与常规拒绝完全相同。以前,它也会被传递给onRejection
(除了以错误为理由拒绝承诺)。
答案 2 :(得分:0)
不应该是:
$http.get('/test')
.success(successFunction)
.error(errorFunction);
至少,这是版本< 1.4.8
对于版本> 1.4.8试试这个:
$http.get('/test')
.then(
function(response) { }, // success
function(response) { } // failure
);
答案 3 :(得分:0)
(function(){
'use strict';
angular
.module('app')
.factory('homeservice',homeservice);
homeservice.$inject = ['$http']
function homeservice($http){
return {
test: function () {
console.log("inside function");
return $http.get('stats.json');
}
};
}
})();
<强> DEMO 强>