我正在尝试执行以下操作。从API获取页面数。每个页面都有多个结果。我会根据自己的情况检查所有结果。如果结果符合条件,那么我需要完成检查,完成页面搜索并将结果传递给另一个函数。我不明白如何结束ajax(在checkPages()函数中执行getData()执行)并在同一位置退出for循环。 break和return关键字无济于事。请告诉我该怎么做。也许我需要重构代码。我真的不喜欢将结果从函数“扔”到函数中。我不使用async / await,因为我需要与旧版浏览器兼容。
getData("url-to-get-data").done(function (result) {
checkPages(result.total_pages);
});
function getData(url) {
return $.get({
url: "url-to-get-data"
})
}
function checkPages(pagesCount) {
for (var i = 2; i <= pagesCount; i++) {
getData("url-to-get-data", i).done(function(result) {
var today = checkToday(result);
if (today != null) {
//someMethod
//how to end the getData function and the for loop
}
});
}
}
function checkToday(response) {
var results = response.results;
var today = new Date();
var day = today.getDate();
var month = today.getMonth();
for (var i = 0; i < results.length; i++) {
var d = new Date(results[i].release_date);
if (d.getDate() === day && d.getMonth() === month) {
return results[i];
}
}
return null;
}
答案 0 :(得分:2)
对checkPages函数的最简单更改
根据需要自行调用的内部函数
import com.gargoylesoftware.htmlunit.javascript.host.file.File;
答案 1 :(得分:1)
如果我理解正确,您正在尝试执行类似的操作?
更新:实现了que检查请求是否已完成
getData("url-to-get-data").done(function (result) {
checkPages(result.total_pages);
});
function getData(url) {
return $.get({
url: "url-to-get-data"
})
}
function checkPages(pagesCount) {
let doContinue = true;
let loading = false;
let i = 2;
var checker = setTimeout(()=>{
if(i > pagesCount) clearTimeout(checker);
if(!loading){
loading = true;
getData("url-to-get-data", i).done(function(result) {
var today = checkToday(result);
if (today != null) {
clearTimeout(checker);
}
i++;
loading = false;
});
}
},100);
}
function checkToday(response) {
var results = response.results;
var today = new Date();
var day = today.getDate();
var month = today.getMonth();
for (var i = 0; i < results.length; i++) {
var d = new Date(results[i].release_date);
if (d.getDate() === day && d.getMonth() === month) {
return results[i];
}
}
return null;
}
答案 2 :(得分:0)
使ajax调用同步或使用回调函数来不断获取更多数据,直到满足条件为止。