我想在返回之前解决$ http get请求,但我似乎总是得到未定义的结果。 我花了很多时间研究和尝试不同的方法,似乎仍然无法解决它,你们中的任何人都能看到我出错的地方吗?
这是services.js文件
(function() {
angular.module('Home')
.factory('HomeService', HomeService);
function HomeService($http) {
return {
getStatus: getStatus()
};
function getStatus($scope) {
$http({
method: 'GET',
url: 'http://rubynode-iot.chimera.projects.local/sparkDrivers'
}).then(function successCallback(response) {
}, function errorCallback(response) {
});
}
}
}());
这是我希望发送解析结果的控制器。
function HomeController(HomeService) {
HomeService.getStatus;
console.log(HomeService.getStatus)
};
答案 0 :(得分:0)
这是学习使用承诺。这是获得您想要的快速方法。我会查看promises和$ q函数,你也可以实现但我在这里不详细说明。 Angular docs on $q 基本上,您从服务返回承诺并实现代码,以便在承诺在控制器内返回时运行。
(function() {
angular.module('Home')
.factory('HomeService', HomeService);
function HomeService($http) {
return {
getStatus: getStatus
};
function getStatus($scope) {
return $http({
method: 'GET',
url: 'http://rubynode-iot.chimera.projects.local/sparkDrivers'
});
}
}
// Your controller should use the service like this
function HomeController(HomeService) {
HomeService.getStatus().then(function(response){
console.log(response.data);
},function(response){
console.log('an error occured');
});
}());

答案 1 :(得分:0)
您可以在服务中退回承诺,以便在您的控制器中解决:
<强>服务强>
function getStatus() {
var promise = $http({
method: 'GET',
url: 'http://rubynode-iot.chimera.projects.local/sparkDrivers'
});
promise.then(function(data) {
return data.data;
});
};
<强>控制器:强>
HomeService.getStatus().then(function(status) {
$scope.status = status;
});
答案 2 :(得分:0)
试试这个:
(function() {
angular.module('Home').service('HomeService', HomeService);
function HomeService($http) {
this.getStatus = function() {
return $http({
method: 'GET',
url: 'http://rubynode-iot.chimera.projects.local/sparkDrivers'
}).then(function successCallback(response) {
}, function errorCallback(response) {
});
}
}
}());
并在您的控制器中:
angular.module('yourApp')
.controller('yourController', ['HomeService',
function(HomeService){
function getStatusFromSrv(){
var status;
HomeService.getStatus().then(function(response){
status = response;
console.log("status:" , status);
});
}
}
])