繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM