我已经做了一些关于使用$http
服务访问属性文件的回复,但现在确定它如何适合这种情况
我创建了一个从poperties文件返回主机名的服务,该服务的调用客户端应该对服务进行阻塞调用,并且只有在读取属性文件时才继续。
var serviceMod = angular.module('serviceModule',[])
.factory('configService', function($http){
return {
getValue: function(key){
$http.get("js/resources/urls.properties").success(function(response){
console.log('how to send this response to clients sync??? ' + response)
})
return ????
}
}
})
someOtherControllr.js
var urlValue = configService.getValue('url')
我面临的问题是$http
服务的异步性质。当回调接收到响应时,主线程已经完成执行someOtherController.js
答案 0 :(得分:2)
您需要解决服务返回的承诺。我们可以返回$http
调用并在我们的控制器中解析它(因为return $http.get
是一个承诺本身)。查看AngularJS $q和$http文档,以便更好地理解正在发生的基础机制,并观察以下更改......
.factory('configService', function($http) {
return {
getValue: function(key) {
return $http.get('js/resources/urls.properties');
}
}
});
var urlValue;
// --asynchronous
configService.getValue('url').then(function(response) {
urlValue = response.data; // -- success logic
});
console.log('be mindful - I will execute before you get a response');
[...]
答案 1 :(得分:0)
简单方法 - 使用回调(它仍然是异步的。实际上你不能让它同步):
getValue: function(key, onSuccess){
$http.get("js/resources/urls.properties").success(function(response){
onSuccess(response);
})