我正在使用AngularJS,在服务中我有这个:
var fn = {
test: function() {
$http.post(...)
.success(function(response) {
console.log(response);
return response;
})
}
}
this.testPostCall = function (id) {
console.log(fn.test());
};
在控制器testPostCall未定义,实际上在控制台中,我得到的第一个输出是未定义的,第二个输出是正确的JSON响应。
你知道为什么在控制器内部未定义? 谢谢
答案 0 :(得分:2)
这是因为你正在做 asynchronous procedure not a synchronous one 。如 $http
documentation :
$ http API基于 $q 公开的延迟/承诺API 服务
您的代码实际上显示的是正确的行为,这是因为fn.test()
函数没有返回任何内容,因此评估为undefined
。如果要访问从测试函数收到的数据,则必须返回$http.post()
本身。
它应该是这样的:
var fn = {
test: function() {
return $http.post(...);
}
};
fn.test().success(function(data) {
console.log(data);
});
答案 1 :(得分:1)
你的过程完全错了。试试这种方式
服务
var myModule = angular.module('myModule', []);
myModule.factory('serviceId', function () {
var shinyNewServiceInstance = {
test: test
};
// factory function body that constructs shinyNewServiceInstance
return shinyNewServiceInstance;
function test() {
$http.post(...)
.success(function (response) {
console.log(response);
return response;
})
}
});
<强>控制器强>
myModule.controller('TestController', ['$scope', 'serviceId',
function ($scope, serviceId) {
$scope.greeting = 'Hola!';
$scope.Test = Test;
function Test() {
console.log(serviceId.test());
}
}
]);