在for循环完成后,如何在Javascript中调用函数?
我正在尝试通过for循环运行多个检查。有时在循环中,我必须运行AJAX请求。为了检查是否完成了,我正在使用waitForIt函数 在for循环完成之后。我想运行InitAndSeachItems函数。但函数总是在循环仍在运行时运行 我尝试了wait和waitForIt函数的一个变体,但我无法使它异步工作。我不想使用睡眠,因为这不是干净的编码。有人能给我一些建议吗 请参阅我正在运行的函数的代码块。在另一个函数中完成AJAX调用并正常工作后,var bool被设置为false。这里的重点是在正确的时间运行initAndSeachItems函数在for循环完成后,如何在Javascript中调用函数?,javascript,jquery,Javascript,Jquery,我正在尝试通过for循环运行多个检查。有时在循环中,我必须运行AJAX请求。为了检查是否完成了,我正在使用waitForIt函数 在for循环完成之后。我想运行InitAndSeachItems函数。但函数总是在循环仍在运行时运行 我尝试了wait和waitForIt函数的一个变体,但我无法使它异步工作。我不想使用睡眠,因为这不是干净的编码。有人能给我一些建议吗 请参阅我正在运行的函数的代码块。在另一个函数中完成AJAX调用并正常工作后,var bool被设置为false。这里的重点是在正确的时
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循环不支持wait子句,它只是不断地迭代。 您可以使用for…of循环,该循环应该尊重wait,但其缺点是每个调用都会等待前一个调用完成。 要并行进行ajax调用,可以使用
等待承诺。all()
看
可能的副本:
什么是
waitForIt()
?哦,我明白了。不要像那样在条件块中声明函数;严格模式下不允许使用它,而且它的实现也不统一。.forEach()
不关心等待
而不是使用forEach use map返回一个promise数组,然后您可以等待它完成promise。您所写的全部内容是:“但是函数总是在循环仍在运行时运行。”您的意思是“但函数总是在循环中并非所有异步调用都返回其结果时运行”?@ChrisLi,是的,这是一个非常好的解决方案。请将其作为“答案”而不是注释输入好吗?