大家好.我看起来似乎是一个微不足道的问题.我有以下JavaScript:
$(function() {
var r = GetResults();
for(var i = 0; i < r.length; i++) {
// Do stuff with r
}
});
function GetResults() {
$.getJSON("/controller/method/", null, function(data) {
return data;
});
}
Run Code Online (Sandbox Code Playgroud)
由于我正在异步调用方法,脚本继续执行,当遇到for循环时,r显然不会有值.我的问题是:当我有一个正在进行异步操作的方法,并且我依赖于它在主块中返回的数据时,如何在数据返回之前暂停执行?就像是:
var r = GetResults(param, function() {
});
Run Code Online (Sandbox Code Playgroud)
其中函数是回调函数.我无法将for循环处理移动到JSON请求的回调函数中,因为我在整个页面中多次重用GetResults的功能,除非我想复制代码.有任何想法吗?
您是否能够在不锁定浏览器的情况下暂停JavaScript执行?通常停止执行的方式是执行无限while()循环,但在FireFox的情况下,它会锁定浏览器,直到循环结束.
你对此有何看法?
我试图覆盖window.confirm()使用HTML实现我自己的对话框.我这样做,所以我不必更改现有的代码(这是一个非常大的代码库).
我需要能够暂停执行以允许用户输入; 反过来返回一个像标准确认函数那样的布尔值:
if (confirm("..."))
{
// user pressed "OK"
}
else
{
// user pressed "Cancel"
}
Run Code Online (Sandbox Code Playgroud)
更新
据我所知; 这不能使用setTimeout()或setInterval()因为这些函数执行异步给出的代码.