将angular factory与$http一起使用



我需要翻译值工厂。该工厂从服务器接收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] + ')';
},  
};
});

您认为异步调用是以同步方式完成的。这不会发生,您必须等到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] + ')';
});
},  
};
});

最新更新