Javascript 如何检查循环启动的功能何时完成?
我正在运行Javascript 如何检查循环启动的功能何时完成?,javascript,jquery,ajax,loops,Javascript,Jquery,Ajax,Loops,我正在运行match()。对于每个stop ID,我调用一个函数,该函数通过另一个route ID数组和AJAX调用的响应循环查找匹配项 如果它在数组中找到routeID和routeID之间的匹配项,则会将结果添加到每个循环中的另一个数组中 我的问题是,我找不到一种方法来确定match()循环调用的函数何时完成 我需要这样做的原因是,我需要确保jpFromStops数组是完整的,并且可以由另一个函数处理 最好的方法是什么 function match() { // Arra
match()。对于每个stop ID,我调用一个函数,该函数通过另一个route ID数组和AJAX调用的响应循环查找匹配项
如果它在数组中找到routeID和routeID之间的匹配项,则会将结果添加到每个循环中的另一个数组中
我的问题是,我找不到一种方法来确定match()循环调用的函数何时完成
我需要这样做的原因是,我需要确保jpFromStops
数组是完整的,并且可以由另一个函数处理
最好的方法是什么
function match() {
// Array length is 5
for(i=0; i < fromStopsAr.length; i++) {
getFromRoutesStopId(fromStopsAr[i]);
}
console.log("Match Array Output: " + jpFromStops.toString());
}
function getFromRoutesStopId(id) {
jpFromStops=[];
tempAr = [];
jQuery.ajax({
type: "GET",
url: 'http://apu-url.com/v1/gtfs/routes/stopid/'+id+'?api_key=API_KEY',
dataType: "jsonp",
cache: false,
crossDomain: true,
processData: true,
success: function (data) {
$.each( matchRoutes, function(index, value) {
$.each(data.response, function(key, data) {
if(data.route_short_name.toString() == value) {
jpFromStops[jpFromStops.length] = id + ":" + value;
}
});
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("There is a problem");
}
});
}
您可以在以下情况下返回承诺并使用$
function match() {
var promises = [];
// Array length is 5
for(i=0; i < fromStopsAr.length; i++) {
promises.push(getFromRoutesStopId(fromStopsAr[i]));
}
$.when.apply($, promises).then(function() {
console.log("Match Array Output: " + jpFromStops.toString());
});
}
function getFromRoutesStopId(id) {
jpFromStops=[];
tempAr = [];
return jQuery.ajax({
type: "GET",
url: 'http://apu-url.com/v1/gtfs/routes/stopid/'+id+'?api_key=API_KEY',
dataType: "jsonp",
cache: false,
crossDomain: true,
processData: true,
success: function (data) {
$.each( matchRoutes, function(index, value) {
$.each(data.response, function(key, data) {
if(data.route_short_name.toString() == value) {
jpFromStops[jpFromStops.length] = id + ":" + value;
}
});
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("There is a problem");
}
});
}
函数匹配(){
var承诺=[];
//数组长度为5
对于(i=0;i
您可以使用计数器……类似于:
var count = 0;
function getFromRoutesStopId(id) {
jpFromStops=[];
tempAr = [];
jQuery.ajax({
type: "GET",
url: 'http://apu-url.com/v1/gtfs/routes/stopid/'+id+'?api_key=API_KEY',
dataType: "jsonp",
cache: false,
crossDomain: true,
processData: true,
success: function (data) {
count++;
if(count == fromStopsAr.length){your code or function call}
$.each( matchRoutes, function(index, value) {
$.each(data.response, function(key, data) {
if(data.route_short_name.toString() == value) {
jpFromStops[jpFromStops.length] = id + ":" + value;
}
});
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
count++;
if(count == fromStopsAr.length){your code or function call}
alert("There is a problem");
}
});
}
在处理ajax
调用时,需要等待,直到每个调用都完成执行
遵循以下模式:
var jobs = [11, 12, 14, 15];
function doTheJob() {
if (jobs.length === 0) {
alert('All jobs are done now.');
complete();
return;
}
var job_Id = jobs.pop();
$.ajax({
url: "/DoTheJob",
complete: function () {
doTheJob();
}
});
};
添加一个计数器,该计数器在成功或错误时递增,当它与fromStopsAr.length
匹配时,您的任务就完成了。@brso05当我多次调用“getFromRoutesStopId(id)”时,我该如何做。@Ted在Ajax调用的成功块结束时,该计数器是否会出现?@Yonkee——请参阅jcubic的答案。更好的是/@brso05我不认为JSONP和跨域调用支持async:false。谢谢你的回答,但是即使使用这个,在ajax更新数组之前,我仍然得到空的“匹配输出”。
var jobs = [11, 12, 14, 15];
function doTheJob() {
if (jobs.length === 0) {
alert('All jobs are done now.');
complete();
return;
}
var job_Id = jobs.pop();
$.ajax({
url: "/DoTheJob",
complete: function () {
doTheJob();
}
});
};