我需要翻译价值工厂。该工厂从服务器接收translateData。和角度控制器调用convertValue函数。但是$ http是异步方法,因此控制器获取未定义的值。因为尚未收到http响应。
我想知道我能否在工厂初始化完成(=从服务器下载数据)并按顺序创建控制器。
angular.module("app")
.factory("service", function ($http) {
var allDataMap = {};
$http({
method: 'GET',
url: '/data'
}).then(function (response) {
angular.forEach(response.data.datas, function (value) {
allDataMap[value.key] = value.value;
});
});
return {
convertValue: function (key) {
return key + '(' + allDataMap[key] + ')';
},
};
});
答案 0 :(得分:0)
您正在考虑异步调用以同步方式完成。那不会发生,您必须等到ajax调用完成后,您才能使用promise轻松实现这一点。
angular.module("app")
.factory("service", function ($http) {
var allDataMap = {};
// create a promise
var promise = $http({
method: 'GET',
url: '/data'
}).then(function (response) {
angular.forEach(response.data.datas, function (value) {
allDataMap[value.key] = value.value;
});
return allDataMap;
});
return {
convertValue: function (key) {
// wait until promise finish
return promise.then(function() {
return key + '(' + allDataMap[key] + ')';
});
},
};
});