python 弹窗不阻断线程_Javascript 如何阻断程序的运行

通常情况下 JavaScript 是单线程的,一段 Js 程序的运行会占满整个程序进程,我们通常会想方设法的通过异步编程来减少程序的阻塞,那么我们今天反其道而行之,看看通过怎么样正常的方式来阻塞 Js 运行。

无限循环

单线程的 JavaScript 可以给我们灵感,只要程序不断的计算就可以阻塞程序的进程:

function sleep(d){

var t = Date.now();

while(Date.now() - t <= d);

}

function test() {

console.log('sleep');

sleep(10000);

console.log('run');

}

test();

但是这种方式其实是通过无限占用计算机的资源来造成假死状态,它会消耗大量的 CPU,并没有真正的让程序进程停止,这种方式不可取。

setTimeout

我们直接用 setTimeout 回调的方式来阻断程序的进程,当然它的确是没有让程序继续进行并且让 CPU 空闲下来,但是这种写法并不是一种同步编程的方式:

function test() {

console.log('sleep');

setTimeout(function() {

console.log('run');

}, 10000)

}

await

ES 的高级版本出现了 Promise、await 等异步编程,它们让程序的写法更佳的优雅简介,同样也要借助于 setTimeout 来解决,建议采用此方式:

function sleep(ms) {

return new Promise(resolve => setTimeout(resolve, ms));

}

async function test() {

console.log('sleep');

await sleep(10000);

console.log('run');

}

test();

generator & yield

ES6 的迭代器同样也具备异步编程能力,但是这种写法相当晦涩,建议少用:

function sleep(time) {

setTimeout(function () {

test.next();

}, time);

}

function* gen() {

console.log('sleep');

yield sleep(10000);

console.log('10 second later');

}

var test = gen();

test.next();

其它

还有一些借助于 Java Applet、Flash、请求服务端的 Sleep 服务,甚至是 node 的 sleep 模块(底层也是调用 C 的 sleep),他们都不是非常纯正的通过 Js 语言本身的特性来处理,当然是可以借鉴。

总结

上述方法总结下来就是两种,一种是强行阻断式利用 Js 的单线程机制;另一种就是借助 Js 的异步事件机制+高级异步编程语法。当然我们在实际业务情况中使用阻断 JS 进程的地方非常少,经常会通过 UI 来禁止用户继续操作,这样的探索仅仅是搞清楚一些 Js 的基本原理,有助于我们很好的了解它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux复制文件夹到另一个目录_Linux|一个命令行统计给定目录中有多少个子目录,学浪计划...

wc命令用于统计指定文件的字节数、字数、行数、并将统计结果显示出来。一般格式&#xff1a; wc [选项] [文件]选项&#xff1a;-c&#xff0c;--bytes 统计字节数-l&#xff0c;--lines 统计行数-w&#xff0c;--words 统计字数ls命令-l 以长格式显示文本的详细信息。-R 表示递…

mysql源码安装分析_MySQL源码分析(0):编译安装及调试(转)

编译安装为了实现MySQL的更高级别的性能调优&#xff0c;我们通常需要理解其内部实现机制&#xff0c;并对其进行优化调试。在下面的系列中&#xff0c;我们会分别介绍MySQL的部分内部实现机制。首先我们介绍如何从源代码部署一台MySQL服务器。1.下载MySQL Community Server源码…

前端做后台管理系统有前途吗_关于后台管理系统前端项目的思考

开发后台管理系统是大部分前端开发人员接触过的项目&#xff0c;如何更好的进行项目的搭建、组件的开发、数据结构的设计等等&#xff0c;这些都是需要考虑的问题。以下是我结合一些项目的经历和其他大佬的项目代码与技术分享&#xff0c;做出了对于后台管理系统中前端项目的思…

用python绘制熊猫图案_绘制带有熊猫和Matplotlib的一分钟烛台

给出了以下Pandas数据帧的示例date open high low close volume0 2015-03-13 08:00:00 71.602 71.637 71.427 71.539 0.0002491 2015-03-13 08:01:00 71.541 71.563 71.461 71.501 0.0002152 2015-03-13 08:02:00 71.521 71.537 71.504 71.533 0.0000483 2015-03-13 08:03:00 7…

mysql修改主从复制id_mysql主从复制设置

三、mysql复制master和每个slave是通过unique ID来区分的(server-id选项),而且每个slave需要配置好master的主机名&#xff0c;日志文件名&#xff0c;和日志位置这些可以通过在slave会话中使用命令CHANGE MASTER TO &#xff0c;存储在slave的master.info文件中--begin1.在mas…

响应式编程优点 有效_什么是响应式编程?

响应式编程是一种通过异步和数据流来构建事物关系的编程模型。这里每个词都很重要&#xff0c;“事物的关系”是响应式编程的核心理念&#xff0c;“数据流”和“异步”是实现这个核心理念的关键。为了帮助大家理解这个概念&#xff0c;我们不妨以APP初始化业务为例来拆解一下这…

虚拟跳线软件干什么用的_视频教程:用 ESI 的虚拟跳线给你的声音添加效果

本视频讲述了如何在互联网上给你的声音添加效果。你可以使用任何想用的效果器&#xff0c;而且不仅可以输入你的声音&#xff0c;输入信号还可以是任何乐器音源&#xff0c;例如键盘或吉他&#xff0c;你甚至可以直播你的整个工程。请先看视频&#xff1a;视频中使用Bitwig给声…

利用python进行数据分析第一版和第二版区别_《利用Python进行数据分析·第2版》第1章 准备工作...

1.1 本书的内容本书讲的是利用Python进行数据控制、处理、整理、分析等方面的具体细节和基本要点。我的目标是介绍Python编程和用于数据处理的库和工具环境&#xff0c;掌握这些&#xff0c;可以让你成为一个数据分析专家。虽然本书的标题是“数据分析”&#xff0c;重点确实Py…

极光推送java demo_极光推送- 3 分钟 Demo - 极光文档

3 分钟快速使用 JPush Android Demo本文目的在于&#xff0c;指导新接触极光推送的开发者&#xff0c;在短短几分钟时间内把极光推送跑起来&#xff1a;安装 Demo 客户端到手机在 Portal 上推送通知客户端收到推送并显示在状态栏创建极光推送开发者帐号Portal 上创建应用使用注…

python猴子偷桃_Python实例100个(基于最新Python3.7版本)

Python3 100例原题地址&#xff1a;http://www.runoob.com/python/python-100-examples.htmlgit地址&#xff1a;https://github.com/RichardFu123/Python100Cases转载请标注&#xff1a;https://blog.csdn.net/weixin_41084236/article/details/81564963原例为Python2.7版本重…

java ldap添加用户名密码_java ldap用户密码md5加密

在这里不过多介绍ldap&#xff0c;因为这样的文章特别多&#xff0c;这里就简单直接的记录这一个问题。在springboot中通过引入spring-boot-starter-data-ldap&#xff0c;使用LdapTemplate真的挺方便&#xff0c;现在遇到一个问题&#xff0c;添加用户时&#xff0c;userPassw…

python什么元素为真_如何使用Python基础内置函数

如何使用Python基础内置函数发布时间&#xff1a;2020-08-05 13:46:59

java dumpstack_Java获取执行进程的dump文件及获取Java stack

转发自https://blog.csdn.net/MCC_MCC_MCC/article/details/806231561.Windows/Linux环境下查看Java进程ID方法使用Java自带的工具VisualVM工具实现&#xff0c;在CMD或者是Linux终端下执行“jvisualvm”命令即可以进入VisualVM控制台&#xff0c;双击左侧的进程即可以查看到详…

python语言程序设计赵璐课后答案_Python语言程序设计

Q&#xff1a;为什么越来越多的学校和专业已经或者计划开设Python程序设计相关课程&#xff1f;A&#xff1a;相较于其它大部分的通用型程序设计语言&#xff0c;Python的基础语法相对简单&#xff0c;且在很多热门的领域都有着功能强大而全面的第三方库&#xff0c;使得那些即…

java println 数组_java 数组输出

那就把两个for循环的顺序改动一下&#xff0c;把条件也改一下就好。System.out.println("--------------------------武侠小说列表-----------------------------");System.out.println("序号\t\t""名称\t\t""作者\t\t""简介&quo…

python中find函数运算结果类型_Python 运算符与数据类型

Python 运算符运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算,在Python中运算符大致可以分为7种类型:算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算等,下面的例子将依次介绍这几种运算符的使用技巧.◆算数运算符◆算术运算(arithmetic operators)符…

python基本概念_python基本概念-关键要素

1. 要素1&#xff1a; 数据类型Python提供了几种内置的数据类型&#xff0c;现在我们只关注其中两种。Python使用int类型表示整数(正整数或负整数)&#xff0c;使用str类型表示字符串(Unicode字符序列)。如果需要将一个数据项从某种类型转换为另一种类型&#xff0c;可以使用语…

java jar 没有主清单属性_Spring Boot jar中没有主清单属性的解决方法

使用Spring Boot微服务搭建框架&#xff0c;在eclipse和Idea下能正常运行&#xff0c;但是在打成jar包部署或者直接使用java -jar命令的时候&#xff0c;提示了xxxxxx.jar中没有主清单属性&#xff1a;D:\hu-git\spring-xxx-xxx\target>java -jar spring-cloud-eureka-0.0.1…

python分行_基于python实现对文件进行切分行

针对配置文件进行切分&#xff0c;重组&#xff0c;每隔30行为一段&#xff0c;进行重新生成功能。代码如下#!/usr/local/python/bin/python# codingutf-8import sysimport reimport osf open(config.conf,r)#判断文件条数def file_num(filename):num_col 0with open(filenam…

java 使用适当的签名_关于数字签名和policy文件设置!

目前做一项目&#xff0c;jbuilder4oraclewindows2000(linux),打算用appletservlet做成分布式b/s结构&#xff0c;其中有两个关键技术难点&#xff1a;1:与word&#xff0c;excel等程序集成。用jintegra解决(多谢路人甲等人的指点)2:applet存取客户机(browser)上的本地文件(主要…