`

解决js中 alert 单线程执行的问题

 
阅读更多

 问题描述

        前一段时间遇到问题,项目之间相互调用js。场景如下,系统A的界面点击“预览”按钮,调用系统B的js方法,并弹出系统B的预览界面,系统B的预览界面点击“提交”代码逻辑是1.调用系统A的submit方法 2.关闭自己的页面。那么问题来了,执行第1步的时候,因为系统A   submit方法里面异步调用成功之后,会使用alert弹出提示,而由于js的单线程执行,导致第2步就执行不到,就会出现,预览界面没有关闭,系统A的界面又弹出提示的情况(注:在浏览器使用选项卡打开的时候会出现这个问题

 

解决方案

       使用setTimeout 延时去调用系统A的submit的方法,这样在系统B的预览界面点击提交的时候,1和2步骤都能够执行到。但是要注意设置延时时间的长短,不可过长,过长会导致用户等待的时间长的问题,用户的体验度就会非常糟糕,过短会导致出现第2步没来得及执行的情况,在我的解决方案中100毫秒的时间刚刚(仅供参考)

 

 

例子

   html代码

 

<span id="test">测试</span>
 
   js代码    
$(function(){
  alertF();
  $("#test").css("color",'red');
})

function alertF() {
  alert(32);
  
}
 

 

    如何做到弹出的同时也改变字体的颜色,这个时候就可以使用setTimeout方法来解决,修改过后的js代码如下

    

$(function(){
  setTimeout("alertF()",100);
  $("#test").css("color",'red');
})

function alertF() {
  alert(32);
  
}

 

 

   

   

分享到:
评论

相关推荐

    JS提示框美化 alert confirm wait 美化

    而`wait`并不是JavaScript原生提供的函数,它可能是指开发者希望实现的一种暂停效果,但这在浏览器环境中并不直接支持,因为JavaScript是单线程的,长时间阻塞主线程会导致页面无响应。 为了美化`alert`和`confirm`...

    理解javascript定时器中的单线程

    1. **JavaScript引擎的单线程执行**: 当JavaScript代码执行时,它是在一个单独的线程中进行的,称为JavaScript引擎线程。如果在这个线程中出现阻塞,比如一个无限循环,那么后续的所有代码,包括定时器,都无法...

    JavaScript多线程的实现方法(gif).txt

    在JavaScript中,传统的单线程模型限制了其在复杂应用中的性能表现。随着Web应用程序功能日益强大,多线程的支持变得越来越重要。虽然原生JavaScript是基于事件循环的单线程语言,但可以通过一些技巧来模拟多线程的...

    一个奇怪的问题使用ajax提交必须alert才能赋值

    可能的原因在于,JavaScript是单线程的,而AJAX请求默认是异步的。这意味着当发起AJAX请求后,JavaScript会继续执行下一行代码,而不会等待请求完成。因此,如果在请求完成前尝试访问返回值,此时返回值通常是...

    HTML5 Web Workers之网站也能多线程的实现

    在HTML4中,JavaScript的单线程特性意味着如果浏览器中的JavaScript代码执行时间过长,将导致整个页面的冻结,用户只能等待代码执行完毕或中止。而在使用了Web Workers后,就可以将一些复杂的计算任务分配给后台线程...

    js 程序执行与顺序实现详解

    浏览器中的Web API是多线程的,它们负责处理如DOM操作、网络请求等任务,但这些任务的回调函数和JavaScript的主执行线程仍然是单线程的。一旦在JavaScript的主执行线程中发生阻塞,整个页面的响应都会暂停。 ...

    JavaScript是否可实现多线程 深入理解JavaScript定时机制

    JavaScript是一种单线程编程语言,这意味着在任何给定时间,JavaScript引擎只能执行一个任务。然而,这并不意味着JavaScript无法处理异步操作或者模拟多线程的行为。JavaScript通过事件循环(Event Loop)和异步任务...

    alert中断settimeout计时功能

    由于JavaScript引擎是单线程的,这意味着在对话框出现时,所有后续的代码执行都会暂停,直到用户关闭这个对话框。因此,`setTimeout`的计时也会被中断,不会继续计时,而是会在对话框关闭后重新开始计时。 例如,...

    JavaScript 中的异步模式【APICloud教程】

    由于JavaScript的单线程特性,setTimeout不会阻塞后续代码的执行,因此alert(online)会在setTimeout设置的函数执行之前运行,导致显示"false"。 为了确保在变量online被更新后再执行alert,我们需要使用回调函数。...

    generator-ajax.zip

    总的来说,Generator、thunk和异步处理的同步写法是现代JavaScript中解决复杂异步问题的重要工具。通过对alert和confirm的重写,我们可以在不牺牲用户体验的前提下,更好地控制程序的执行流程。理解和掌握这些技术,...

    H5+WebWorkers多线程开发使用详解.docx

    WebWorkers是HTML5引入的一种技术,用于解决JavaScript的单线程执行问题,使得浏览器可以在后台独立执行脚本,不阻塞用户界面。WebWorkers的主要目标是提升网页应用的性能,特别是处理大量计算任务时,避免因为...

    HTML5 Web Workers Demo多线程示例

    HTML5的Web Workers是Web应用程序中的一个强大特性,它允许开发者在后台线程中执行脚本,从而解决了JavaScript单线程模型可能导致的性能瓶颈。在传统的JavaScript环境中,所有的任务都在同一个线程上运行,这意味着...

    基于JavaScript实现一定时间后去执行一个函数

    3. **异步执行**:由于JavaScript是单线程的,`setTimeout()`的执行不会打断当前代码的执行,而是会在事件循环的下一个阶段执行。 4. **返回值**:`setTimeout()`函数会返回一个整数,代表定时器的ID。这个ID可以...

    Using a Timer in Javascript.zip

    例如,由于JavaScript是单线程的,如果定时器触发的回调函数执行时间过长,会导致后续的定时器延迟执行。为了避免这种情况,可以使用Promise、async/await或Web Workers来处理耗时操作。 4. **游戏开发中的应用**:...

    js计时器 (脚本语言)

    1. 非阻塞特性:JavaScript是单线程的,计时器不会阻塞其他代码的执行,因此可能导致预期之外的执行顺序。 2. 回调地狱:如果多个计时器嵌套使用,可能会导致回调函数层次过深,形成“回调地狱”,不利于代码维护。 ...

    JavaScript定时器实现的原理分析

    JavaScript是单线程执行环境,即同一时间内只能执行一个任务。当使用setTimeout时,尽管设定的时间为0,也不会立即执行,而是将回调函数放到事件队列中,等待当前执行栈清空后,才会执行。 举个例子: ```...

    Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)

    3. 考虑到JavaScript是单线程的,定时器并不能保证完全准时执行。如果执行回调函数的时间超过了设定的延迟时间,实际执行的时间可能向后推迟。 4. 由于浏览器或JavaScript引擎可能无法精确控制时间,setInterval和...

    ANDROIDWEBVIEW中的JAVASCRIPT代码使用[参照].pdf

    综上所述,AndroidWebView中的JavaScript使用涉及启用JavaScript支持、创建Java对象以绑定到JavaScript以及处理线程安全和特定的WebView事件。通过这种方式,我们可以构建出既有丰富交互体验又具有强大功能的混合型...

    JavaScript.rar

    异步编程解决了JavaScript单线程环境中处理耗时操作的问题,如网络请求和定时任务。模块系统(如CommonJS或ES6的import/export)使得代码组织更加清晰,便于复用和维护。 在压缩包内的"JavaScript.txt"文件中,可能...

Global site tag (gtag.js) - Google Analytics