我創建了一個簡單的Chrome擴展,它遍歷用戶瀏覽歷史記錄並計算匹配特定編程語言數組的結果數量。問題是我想迭代數組的長度,併爲數組列表中的每個字符串調用一個異步chrome方法。該擴展可以在這裏找到: What type of programmer are you? 有問題的代碼是:for循環中的異步方法
function myfunction() {
var listOfLanguages = ["Java", "C", "C++", "PHP", "C#", "Visual Basic", "Python", "Objective-C", "Perl", "Javascript", "Ruby"];
var mostPopular = "not a programmer";
var totalResults = 0;
for (var i = 0, len = listOfLanguages.length; i < len; i++) {
(function (i) {
setTimeout(function() {
chrome.history.search({
text: listOfLanguages[i],
maxResults: 500
}, function (callback) {
var countOfResults = callback.length;
var langOfResults = listOfLanguages[i];
if (countOfResults > totalResults) {
totalResults = countOfResults;
mostPopular = langOfResults;
}
if (i == 10) {
var lang = mostPopular;
console.log(mostPopular);
switch (lang) {
case "Java":
document.write('<img src="assets/images/java.png"/>');
break;
case "C#":
document.write('<img src="assets/images/C#.jpg"/>');
break;
case "C":
document.write('<img src="assets/images/C.png"/>');
break;
case "C++":
document.write('<img src="assets/images/c++.png"/>');
break;
case "Objective-C":
document.write('<img src="assets/images/objectivec.png"/>');
break;
case "Perl":
document.write('<img src="assets/images/perl.gif"/>');
break;
case "PHP":
document.write('<img src="assets/images/php.png"/>');
break;
case "Python":
document.write('<img src="assets/images/python.jpg"/>');
break;
case "Ruby":
document.write('<img src="assets/images/ruby.png"/>');
break;
case "Visual Basic":
document.write('<img src="assets/images/vb.png"/>');
default:
document.write('<img src="assets/images/noprog.png"/>');
}
}
});
}, i * 1000);
})(i);
}
}
window.onload = myfunction;
我最終通過設置每次迭代裏面超時功能周圍找到一個工作,但它不是一個完美的解決方案。我已經在網上閱讀了很多文章來處理這個問題,它們涉及到我不瞭解的更多層次的迭代。希望有人能夠解釋處理這個問題的正確方法,很多人都遇到過這個問題。