【发布时间】:2018-08-21 11:24:09
【问题描述】:
我正在尝试执行以下操作。从 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;
}
【问题讨论】:
-
那是因为你在循环中执行 ajax 请求......它们是异步的,你不会得到你想要的结果,因为当你的第一个请求完成时,我确定你的循环结束.. 请在 StackOverflow 周围寻找类似的问题,因为有很多。
-
您需要确保按顺序发出请求 - 到目前为止,所有请求都已“启动”,然后才能执行任何“检查”
标签: javascript jquery ajax for-loop async-await