该程序旨在按下更新按钮时在Google地图上发布最近的SoundCloud上传位置。每次"更新"时都会调用populate()按下按钮,将在地图上发布其中一个位置或调用重新填充数组的findLocations()。由于某种原因,findLocations()在populate()调用时会发出无限请求。这是我在JavaScript中的第一个程序,所以它可能是一个漂亮的noob错误,如果有人能够阐明它会很棒! GitHub链接也在这里。
编辑:当我设置断点并逐步执行程序时,findLocations()有效。我开始认为问题可能与GET请求是异步调用这一事实有关。这就是我的想法:
这个理论听起来是否合法?如果是这样,我将如何进行测试呢?
https://github.com/blasian/soundcloud-map/tree/drunk
var locations = [];
var offset = 10;
// Create locations array
function findLocations() {
SC.get("/tracks", { limit: 10, offset: offset }, function(tracks){
offset += 10;
for (var i = 0; i < tracks.length; i++) {
SC.get("/users/" + tracks[i].user_id, function(user){
if (user.country) {
locations.push(user.country);
console.log(user.country);
}
});
}
});
}
// Add next location to map
function locate() {
console.log(locations);
if (locations.length > 0) {
gcode(locations.pop());
} else {
findLocations();
locate();
}
}
答案 0 :(得分:3)
您正在使用递归函数:
function locate() {
if (locations.length > 0) {
// recursion stops here
} else {
// updateLocationsUsingAJAX()
// recursion continues here
locate();
}
}
这不符合您的预期:
locations
变量时,JavaScript已经发出了数百个AJAX请求解决方案是重新安排代码,以便在AJAX回调函数中处理位置变量-OR- fire next AJAX request。