JavaScript中实现异步编程模式的4种方法,回调函数、事件监听、发布/订阅、Promises对象:

news/发布时间2024/8/25 19:52:47

下面哪些方法可以用于JavaScript 异步模式的编程?
A
回调函数
B
事件监听
C
发布/订阅
D
Promise对象

正确答案:ABCD
参考答案:
回调函数,这是异步编程最基本的方法。

事件监听,另一种思路是采用事件驱动模式。任务的执行不取决于代码的顺序,而取决于某个事件是否发生。

发布/订阅,上一节的"事件",完全可以理解成"信号"。

Promises对象,Promises 对象是CommonJS 工作组提出的一种规范,目的是为异步编程提供统一接口。

https://www.ruanyifeng.com/blog/2012/12/asynchronous_javascript.html

先解释一下“同步模式”和“异步模式”:

(1)同步模式:就是后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的。

(2)异步模式:完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,

                         后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。 

JavaScript中实现异步编程模式的4种方法,回调函数、事件监听、发布/订阅、Promises对象:

(1)回调函数:这是异步编程最基本的方法,优点是简单、容易理解和部署,缺点是不利于代码的阅读和维护,各个部分之间高度耦合

                      (Coupling),流程会很混乱,而且每个任务只能指定一个回调函数。 例:假定有两个函数f1和f2,后者等待前者的执行结果,如果f1是一个很耗时的任务,可以考虑改写f1,把f2写成f1的回调函 数。 

(2)事件监听:任务的执行不取决于代码的顺序,而取决于某个事件是否发生。优点是比较容易理解,可以绑定多个事件,每个事件可以指定

                         多个回调函数,而且可以”去耦合”(Decoupling),有利于实现模块化。缺点是整个程序都要变成事件驱动型,运行流程会变 得很不清晰。 例:为f1绑定一个事件,当f1发生done事件,就执行f2。 

(3)发布/订阅:我们假定,存在一个”信号中心”,某个任务执行完成,就向信号中心”发布”(publish)一个信号,其他任务可以向信号中心”订

                         阅”(subscribe)这个信号,从而知道什么时候自己可以开始执行。这就叫做”发布/订阅模式”(publish-subscribe pattern), 又称”观察者模式”(observer pattern)。 这种方法的性质与”事件监听”类似,但是明显优于后者。因为我们可以通过查看”消息中心”,了解存在多少信号、每个信号  有多少订阅者,从而监控程序的运行。  

(4)Promises对象:是CommonJS工作组提出的一种规范,目的是为异步编程提供统一接口。简单说,它的思想是,每一个异步任务返回一个

                                Promise对象,该对象有一个then方法,允许指定回调函数。回调函数变成了链式写法,程序的流程可以看得很清楚,而 且有一整套的配套方法,可以实现许多强大的功能。 例:f1的回调函数f2,f1().then(f2);

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

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

相关文章

2023-2024-1学期20232412《网络空间安全导论》第十周学习总结

教材学习内容总结 本周主要学习《网络空间安全导论》第一章的内容,初步了解了网络空间安全的概念以及学科所覆盖的内容,了解了相关的法律法规,并且接触了之前从未了解的信息安全标准。通过第一章的学习,我也正式开始对我们专业的学习,认识到网络空间安全的重要性,掌握了计…

《Unix/Linux系统编程》教材学习笔记第十三章

chapter13 网络编程内容 网络编程内容包括:TCP/IP协议、UDP和TCP协议、服务器-客户机计算、HTTP和Web页面、动态Web页面的PHP和CGI编程。 TCP/IP协议 TCP/IP(Comer 1988,2001;RFC1180 1991)是互联网的基础。TCP代表传输控制协议。IP代表互联网协议。目前有两个版本的IP,即I…

Markdown常用

Markdown学习笔记 标题(几级标题就是几个#号+空格,最多6级) 三级标题 四级标题 五级标题 六级标题 字体 helloworld(前后两个*) helloworld(前后一个*) helloworld(前后三个*) helloworld(前后两个~) 引用(>+空格)再小的帆也能远航分割线(三个-或者三个*)图片…

Java登陆第五天——SQL之DQL(三)

子查询 子查询就是在 where中再嵌套一个查询SQL,可以理解为Java中方法的返回值。 --甚至可以套中套 无限套 --被查询出来的表根据结果分为:单行子查询和多行子查询 select 列名 from 表名 where (另一个select语句);准备数据 -- 创建Person create table Person(id int,name…

Linux 中 source 命令

source 命令的作用: a、刷新环境变量 b、执行shell脚本 c、加载函数(环境变量) d、从其他函数中读取环境变量001、 刷新环境变量(base) [root@pc1 software]# source ~/.bashrc ## 刷新环境变量 (base) [root@pc1 software]# 002、执行shell脚本(和bash的区别)(bas…

树的遍历

一、前言 我通过学习大致了解了树的遍历,其中前序遍历是前序遍历(Pre-order Traversal):从根节点开始,先访问根节点,然后递归地前序遍历左子树,最后递归地前序遍历右子树。中序遍历是中序遍历(In-order Traversal):从根节点开始,先递归地中序遍历左子树,然后访问根…

爬虫xpath学习及其使用

xpath可以解析本地的HTML也可以解析服务器的HTML,需要现在浏览安装xpath 的扩展程序,然后再编译器安装lxml库

Java SPI机制总结系列之万字详细图解SPI源码分析

原创/朱季谦 我在《Java SPI机制总结系列之开发入门实例》一文当中,分享了Java SPI的玩法,但是这只是基于表面的应用。若要明白其中的原理实现,还需深入到底层源码,分析一番。 这里再重温一下SPI机制的概念:SPI,是Service Provider Interface的缩写,即服务提供者接口,单…

格局决定结局,进化还是毁灭,Prompt在其中扮演什么角色

Prompt 对知识体系、认知演化和应用生态的深度影响,将引领我们进入一个崭新的GPT时代。Prompt 驱动 ChatGPT 完成从“懵懂”到“开窍”的认知飞跃,让它明确自己的定位和责任。GPT 时代, Prompt 的价值你们可能不懂 最近, OpenAI 推出了基于 GPT 模型的 GPTs 以及 Agent Stroe 系…

Java 面试题之 Logback 打印日志是如何获取当前方法名称的?

在 Java 中,有四种方法可以获取当前正在执行方法体的方法名称,分别是:使用 Thread.currentThread().getStackTrace() 方法 使用异常对象的 getStackTrace() 方法 使用匿名内部类的 getClass().getEnclosingMethod() 方法 Java 9 的 Stack-Walking API本文将根据以上四种方法…

A-口粮运输

题意 \(\color{pink}\text{自己看}\) 分析 令点权 \(w_i=a_i-b_i\)。 首先有一个会被套路的一个假做法:对于 \(a\ge b\) 的点,放左部;对于 \(a<b\) 的点,放右部,形成一个二分图。然后不同部的点对连一条边权为它们的最短路长度的边。然后试图去平衡粮食的数量。 一开始…

XoT:一种新的大语言模型的提示技术

这是微软在11月最新发布的一篇论文,题为“Everything of Thoughts: Defying the Law of Penrose Triangle for Thought Generation”,介绍了一种名为XOT的提示技术,它增强了像GPT-3和GPT-4这样的大型语言模型(llm)解决复杂问题的潜力。当前提示技术的局限性 LLM的最新进展通…

ThinkPHP5漏洞分析之SQL注入1

漏洞概要 本次漏洞存在于 Builder 类的 parseData 方法中。由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞 的产生。漏洞影响版本: 5.0.13<=ThinkPHP<=5.0.15 、 5.1.0<=ThinkPHP<=5.1.5 。 漏洞环境 通过以下命令获取测试环境代码:…

基于线性余弦变换的实时多边形明暗处理

基于线性余弦变换的实时多边形明暗处理 动机使用区域灯光进行着色可以为CG渲染添加大量真实感。然而,它需要求解球面方程,这使得实时渲染具有挑战性。在这个项目中,开发了一种新的球形分布,能够实时使用多边形灯光对基于物理的材料进行着色。 为什么多边形明暗处理很复杂?…

入门乐理(音律屋课程笔记)

认识钢琴键盘与音名钢琴88键,7个白键和5个黑键为一组,去掉最左侧三个键,最右侧1个键,共7组两个黑键和五个黑键组成一组音名:CDEFGAB升降号与还原号

导入jar包,比如导入pymysql

1 jar加载 查看源码运行脚本:%SPARK_HOME%\bin\spark-class2.cmd 关于jar包加载的说明。 1.1 将包放到文件夹路径%SPARK_HOME%\jars里 anaconda是一样的哈,不需要额外改路径。下载地址去mysql官网下哈,下载对应mysql版本的。https://dev.mysql.com/downloads/connector/j/ …

20211316郭佳昊 《信息安全系统设计与实现(上)》 第十周学习总结

一、任务要求 [ 1 ] 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分) 我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题 核心是要求GPT:请你以苏格拉底的方式对我进…

/bin/ld: cannot find -lcolamd

001、make编译报错:/bin/ld: cannot find -lcolamd 002、查找该文件(py38) [root@pc1 Augustus-3.5.0]# find / -name "libcolamd.so" ## 系统上不存在该文件; 那么解决的话就应该安装, 但是安装什么呢? 003、在其他机器上查找该文件(base) [b2022…
推荐文章