同步异步操作时,能否使for
和while
循环不挂起浏览器?
我之所以这样问是因为同步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/