同步异步操作时,能否使forwhile循环不挂起浏览器?

我之所以这样问是因为同步XMLHttpRequest仅阻止UI事件,但不会完全挂起浏览器。我希望有相同的循环行为。

最佳答案

我认为您可能对这个问题有点不对。 JavaScript是单线程的,因此在等待条件时,您不想让它们“阻塞”。相反,您想利用回调来提醒函数您已完成所执行的操作。

例如,假设您有以下几种常见情况:页面上有一个“提交”按钮,用于验证数据,然后询问用户是否确定要继续,然后提交数据。您可能会想到代码如下所示:

function clickSubmit() {
    //validate data
    //show confirmation dialog
    //block until "OK" or "Cancel" is clicked
    //if OK, submit
    //else cancel
}


当然,这将不会真正起作用,因为在您的功能被阻止时,用户将无法单击“确定”或“取消”。因此,您可以利用回调来处理这种情况。像这样:

function clickSubmit() {
    //validate data
    dialogOK.onclick = function () {
        //submit
    }
    dialogCancel.onclick = function () {
        //cancel
    }
    //show confirmation dialog
}


这样,该函数将在显示对话框后立即放弃一个唯一的JS执行线程,但是一旦用户选择确认或取消,该函数便会有效地恢复执行。使用闭包作用域使您可以创建持久性执行上下文,以使您不会“丢失”数据,即使该函数将CPU放弃了其他任务。

现实生活中可能需要根据特定情况进行一些调整,但这是您可以用来实现所需功能的一般结构。

希望我理解你的问题。细节有些稀疏。

顺便说一句,XMLHttpRequest的实现方式是利用本机浏览器功能。不过,在等待响应时,实际上并不需要“阻止”。它可以简单地告诉浏览器引擎发送HTTP请求,然后在响应出现时通知它。与AJAX在实践中的工作方式非常相似。

关于javascript - 使循环不挂起浏览器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13903009/

10-12 12:53
查看更多