Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在for循环完成后,如何在Javascript中调用函数?_Javascript_Jquery - Fatal编程技术网

在for循环完成后,如何在Javascript中调用函数?

在for循环完成后,如何在Javascript中调用函数?,javascript,jquery,Javascript,Jquery,我正在尝试通过for循环运行多个检查。有时在循环中,我必须运行AJAX请求。为了检查是否完成了,我正在使用waitForIt函数 在for循环完成之后。我想运行InitAndSeachItems函数。但函数总是在循环仍在运行时运行 我尝试了wait和waitForIt函数的一个变体,但我无法使它异步工作。我不想使用睡眠,因为这不是干净的编码。有人能给我一些建议吗 请参阅我正在运行的函数的代码块。在另一个函数中完成AJAX调用并正常工作后,var bool被设置为false。这里的重点是在正确的时

我正在尝试通过for循环运行多个检查。有时在循环中,我必须运行AJAX请求。为了检查是否完成了,我正在使用waitForIt函数

在for循环完成之后。我想运行InitAndSeachItems函数。但函数总是在循环仍在运行时运行

我尝试了wait和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循环不支持wait子句,它只是不断地迭代。 您可以使用for…of循环,该循环应该尊重wait,但其缺点是每个调用都会等待前一个调用完成。 要并行进行ajax调用,可以使用
等待承诺。all()

可能的副本:
什么是
waitForIt()
?哦,我明白了。不要像那样在条件块中声明函数;严格模式下不允许使用它,而且它的实现也不统一。
.forEach()
不关心
等待
而不是使用forEach use map返回一个promise数组,然后您可以等待它完成promise。您所写的全部内容是:“但是函数总是在循环仍在运行时运行。”您的意思是“但函数总是在循环中并非所有异步调用都返回其结果时运行”?@ChrisLi,是的,这是一个非常好的解决方案。请将其作为“答案”而不是注释输入好吗?