gpt4 book ai didi

javascript - Angularjs promise 未及时解决

转载 作者:行者123 更新时间:2023-12-02 15:30:59 25 4
gpt4 key购买 nike

我正在尝试检索数据以在可在我的应用程序中使用的服务中使用。问题是我无法为使用它的例程及时解析数据。这是使用它的例程:

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,希望能够填充服务中的数据,然后从其他 Controller 调用它。但是,当我进入 for 循环时,数组是空的,只有在完成后才会填充。

最佳答案

这是因为在 for 循环触发之前, promise 不会得到解决。通过将循环放置在 .then() 中,您将可以访问响应并定义循环值。这不是 DRY,因为如果您将 else 添加到函数中,并且必须添加相同的循环代码,则会出现代码重复。为此,我会将循环重构为外部函数,然后从 getTranslation() 的适当区域内调用它。

    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;
}

关于javascript - Angularjs promise 未及时解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33321008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com