有没有办法暂停脚本,直到javascript闭包完成?JavaScript,jQuery,AJAX

chr*_*ris 0 javascript ajax jquery closures

如果我使用闭包来定义某些东西,那么有一种等待的方法,直到填充变量,然后再转到下一位.

例:

var myVari = someFunction();
$.each(myVari, function(){/*code for each*/});
Run Code Online (Sandbox Code Playgroud)

定义myVari的函数是一个AJAX调用,它可能需要一秒钟或4秒(不是快速)来定义变量.问题是,在AJAX调用产生结果之前,由于myVari为空,$ .each已经被触发并出错.有没有更好的方法来处理这种情况?

Mat*_*att 6

您应该调整代码,以便可以将回调传递给someFunctionAJAX调用完成时执行的回调.

您可以等待 AJAX调用完成的唯一方法是将调用更改为同步,但这是非常不鼓励的,因为它在AJAX调用期间完全锁定浏览器.

因为您已经在使用jQuery库,所以这个过程callbacks变得更加容易.我不会像你现在那样返回变量,而是返回jQuery AJAX对象(从1.6开始有一个promise接口),这样你就可以轻松地向它添加回调:

function someFunction () {
    return jQuery.ajax('some/url.php', {
        // whatever
    });
}

var myVari = someFunction();
myVari.done(function (data) {
    $.each(data, function(){/*code for each*/});
});
Run Code Online (Sandbox Code Playgroud)