[英]How to call a function in Javascript after a for-loop finishes?
我正在尝试通过 for 循环运行多项检查。 有时在循环中我必须运行一个 AJAX 请求。 要检查是否完成,我正在使用 waitForIt 函数。
for循环结束后。 我想运行 InitAndSeachItems 函数。 但是该函数总是在循环仍在运行时运行。
我尝试过 await 和 waitForIt 函数的一个变体,但我无法让它异步工作。 我想远离使用睡眠,因为那不是干净的编码。 有人可以给我一些建议吗?
请参阅我正在运行的函数的代码块。 在另一个函数中完成 AJAX 调用并正常工作后,var bool 设置为 false。 这里的重点是在正确的时间运行 initAndSeachItems 函数。
this.setFavorietFromJsonString = async function(filterJson) {
/** set variables */
filterJson = JSON.parse(filterJson); /** loop through keys of json object */
for (var key in filterJson) {
/** set variables */
var selectedValues = filterJson[key];
/** loop through values of the keys */
Object.keys(selectedValues).forEach(await function(index) {
/** give input checked true */
if($('.'+key+'Items#'+selectedValues[index]).length > 0) {
$('.'+key+'Items#'+selectedValues[index]).prop('checked', true);
} else {
bool = true;
$('#'+key+'Lijst').val(selectedValues[index].replace('-', ' '));
window["groteFilterSearch"+key](true);
waitForIt(key, selectedValues[index]);
async function waitForIt(key, value){
if (bool === true) {
setTimeout(function(){waitForIt(key, value)},100);
} else {
setTimeout(function(){
$('.'+key+'Items#'+value).prop('checked', true);
bool = false;
},200);
};
}
}
});
}
/** set init of listing */
initAndSearchItems();
};
这源于这样一个事实,即 foreach 循环不遵守 await 子句,它只是不断迭代。 您可以使用for...of
循环,该循环应该尊重等待,但缺点是每个调用都等待前一个调用完成。 要并行执行 ajax 调用,您可以使用await Promise.all()
请参阅await Promise.all() 和多次等待之间有什么区别?
可能的重复项: 将 async/await 与 forEach 循环一起使用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.