我在JavaScript中有一个CSV解析函数,它从CSV获取数据(电影名称)并使用循环中的Ajax调用获取数据。
movies = new Array();
for (var i = 1; i < allData.length; i++) {
var mName = allData[i][0];
var mPath = allData[i][1];
// console.log(decodeURIComponent(mName));
$.get(apiCall, function showData(data) {
if (data) {
mData = data.results;
if (mData.length > 1) {
var urlData = new URLSearchParams(this.url);
var movie_name = urlData.get('query');
movies.push(movie_name);
}
}
})
}
如果数据获得了超过一条电影的记录,它将把它保存为数组中的冲突。
问题是,我可以访问内部if中的电影数组(但它是迭代的,因此我无法使用它),并且在循环结束时它无法访问。我怎样才能访问它?
答案 0 :(得分:3)
你不应该在for
循环中进行api调用。而是这样做,
movies = new Array();
function makeApiCallForEntireArray(index, arr, cb){
if(arr.length == index){
cb(true);
return;
}
$.get(apiCall, function showData(data) {
if (data) {
mData = data.results;
if (mData.length > 1) {
var urlData = new URLSearchParams(this.url);
var movie_name = urlData.get('query');
movies.push(movie_name);
}
}
makeApiCallForEntireArray(index+1, arr, cb);
})
}
makeApiCallForEntireArray(0, allData, function(){
//api calls finished
//movie accesssible here with all the data
});
答案 1 :(得分:0)
由于ajax请求仍在进行中,您将无法在循环结束时访问movies数组中添加的内容。您需要以其他方式执行此操作,以便确保asynch ajax调用的结束。
答案 2 :(得分:0)
我将在Can't get the summation in for loop
的问题中使用@Jaromanda X的答案Promise.all(allData.map(function(d) {
return $.get(apiCall, function showData(data){
return data.results;
});
})).then(function(res) {
//push your movies here...the result of your apiCall is inside the res variable
});