为什么这个javascript从未执行过?

Dav*_*ton 0 javascript

我有以下javascript.我想要它做的是等到一个getJSON已经返回,其中设置了一个标志,然后做一些事情.然而,check在SO上找到下面的函数之后,loaded即使flag是真的,我实际上也无法记录它(因此processData从未执行过).我究竟做错了什么?

        flag = false
        $.getJSON(<url>,
            function(params){ 
                if (params){
                    flag = true;
                 }
            }
        );
 var check = function() {
        console.log("check A");

        if (flag === false) {
            console.log('still going to check');
            return setTimeout(200, check);
        }
        console.log("loaded!");
        processData();
    }
    check();
Run Code Online (Sandbox Code Playgroud)

Gri*_*... 6

你需要setTimeout(check, 200);而不是setTimeout(200, check);.flag在运行该函数之前,您还必须显式设置为false.

但是,您可以选择:

    $.getJSON(<url>,
        function(params){ 
            if (params){
                check();
             }
        }
    );
    var check = function() {
       console.log("check A");
       console.log("loaded!");
       processData();
    }
Run Code Online (Sandbox Code Playgroud)