【发布时间】:2016-01-24 02:12:29
【问题描述】:
我正在尝试检索可在整个应用程序中使用的服务中使用的数据。问题是我无法为使用它的例程及时解决数据。这是使用它的例程:
function getTranslation(lookup, language) {
var i = 0;
if (vm.translations == null) {
//vm.translations = getAllTranslations();
dataService.getTranslations()
.then(function (data) {
vm.translations = data;
});
}
var len = vm.translations.length;
for (var i=0; i < len; i++) {
if (vm.translations[i].labelName == lookup) {
if (language == "English") {
return vm.translations[i].english;
} else {
if (language == "Spanish") {
return vm.translations[i].espanol;
}
}
}
}
return null;
}
这是该服务中的调用方法:
function getAllTranslations() {
return vm.translations = dataService.getTranslations()
.then(function (data) {
vm.translations = data;
return vm.translations;
});
}
这是dataService中的方法:
function getTranslations() {
return $http.get('/api/labeltext')
.then (getTranslationComplete)
.catch(getTranslationFailed);
function getTranslationComplete(response) {
var deferred = $q.defer();
return response.data;
}
function getTranslationFailed(error) {
alert("XHR failed for frequent pawner report: " + error.responseText);
}
}
我还在学习 angularjs,希望能够在服务中填充数据,然后从其他控制器调用它。但是,当我进入我的 for 循环时,数组是空的,只有在完成后才会填充。
【问题讨论】:
-
调用什么代码
getTranslation()? -
如果 API 返回异步数据,它需要在整个应用程序中保持异步。换句话说,您总是需要使用
.then来获取数据。或者,查看ui.router/ngRoute路由器 - 它们支持resolve参数,该参数基本上等待加载数据已加载下的状态/路由
标签: javascript angularjs promise angularjs-service