我已经阅读了关于“promise”对象以及获取某种异步调用的所有方法,或者等到http调用完成后,但我还没有成功。这就是我得到的以及我想要做的事情:
我需要从我的服务器获取一些json文件,并在我的代码(js文件)中使用该json中的数据,而不仅仅是我的HTML模板的数据。
我有一个服务来调用json文件:
mobilityApp.service('serveiWebservices', function($resource) {
return {
getWS: function($scope) {
var path = 'jsonWS/context.json';
$resource(path).get(function (data) {
console.log(data); //data is printed fine
$scope.returnData = data; //just to test, it doesn't work neither
return data;
});
}
};
});
从我的控制器中我称之为:
var data = serveiWebservices.getWS($scope);
console.log(data); //undefined
关于如何使用函数返回的promise对象并在获取所请求的数据后立即执行操作的任何想法?我知道我可以设置“成功”功能,但我不想使用回调。
提前Tnanks!
答案 0 :(得分:4)
这应该有效 -
服务:
mobilityApp.service('serveiWebservices', function($http) {
return {
getWS: function() {
var path = 'jsonWS/context.json';
return $http.get(path, function (response) {
console.log(JSON.stringify(response, null, 4));
return response.data;
});
}
};
});
控制器:
serveiWebservices.getWS().then(function(data) {
console.log(JSON.stringify(data, null, 4));
});
如果您想使用$resource
,这也应该有效 -
mobilityApp.service('serveiWebservices', function($resource) {
return {
getWS: function() {
var path = 'jsonWS/context.json';
return $resource(path).get(function (response) {
console.log(JSON.stringify(response, null, 4));
return response; // might just be response, no response.data
});
}
};
});
答案 1 :(得分:1)
我正在寻找一个有效的解决方案。谢谢@Ross。
这也有效,我修改了Ross示例,并删除了第一个返回:
mobilityApp.service('serveiWebservices', function($http) {
this.getWS = function() {
var path = 'jsonWS/context.json';
return $http.get(path, function (response) {
console.log(JSON.stringify(response, null, 4));
return response.data;
});
}
this.getWS2 = function() {
var path = 'jsonWS2/context.json';
return $http.get(path, function (response) {
console.log(JSON.stringify(response, null, 4));
return response.data;
});
}
});
如果我在这个服务中获得了很多功能,我应该使用Ross示例和返回中的所有函数吗?感谢