我有一個函數,通過不確定數量的項目進行循環,並對每個項目進行異步調用以獲取其他數據(html模板文件的內容)。回調做了一些檢查。由此產生的功能應該是可以接受的。 $ q是更早注入的,這個代碼是工廠的一部分。AngularJS將變量傳遞到循環異步回調
function searchHelpTopics(topics, searchPhrase) {
if (topics == null || topics.length == 0) return "No search results";
var results = [];
var promises = [];
for (var i = 0; i < topics.length; i++) {
var templateURL = topics[i].URL;
var topic = topics[i];
if (topics[i].HelpTopicId != "Search") {
var promise = $templateRequest(templateURL).then(function (template) {
var text = HTMLToText(template, true);
// do the search
if (text.indexOf(searchPhrase) > -1) {
if (text.length > 50) text = text.substring(0, 50);
var result = {};
result.title = topic.Title;
result.excerpt = text;
result.helpID = topic.HelpTopicID;
results.push(result);
}
});
promises.push(promise);
}
}
return $q.all(promises).then(function() {
return results;
})
的這裏的問題是,for循環不會等待回調明顯,因此正在使用的回調題目是不是正確的。我需要一種將主題傳遞到每個循環回調的方法。
[JavaScript閉合內循環 - 簡單實用示例]的可能重複(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-pract ical-example) – 4castle