AJAX——事件循环(EventLoop)

1.事件循环(EventLoop)

概念:JavaScript有一个基于事件循环的并发模型,事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。这个模型与其它语言中的模型截然不同,比如C和Java。

原因:JavaScript单线程(某一刻只能执行一行代码),为了让耗时代码不阻塞其他代码运行,设计了事件循环模型

1.1 事件循环-执行过程

定义:执行代码和收集异步任务的模型,在调用栈空闲,反复调用任务队列里回调函数的执行机制,就叫事件循环。

 执行过程例子

1.2 总结

1.什么是事件循环?

执行代码和收集异步任务,在调用栈空闲时,反复调用任务队列里回调函数执行机制

2.为什么有事件循环?

JavaScript是单线程的,为了不阻塞JS引擎,设计执行代码的模型

3.JavaScript内代码如何执行?

  • 执行同步代码,遇到异步代码交给宿主浏览器环境执行
  • 异步有了结果后,把回调函数放入任务队列排队
  • 当调用栈空闲后,反复调用任务队列里的回调函数

2.事件循环-练习

使用模型,分析代码执行过程

运行结果:

3.宏任务与微任务

ES6之后引入了Promise对象,让JS引擎也可以发起异步任务

异步任务分为:

  • 宏任务:由浏览器环境执行的异步代码

  • 微任务:由JS引擎环境执行的异步代码

 

JavaScript内代码如何执行?

  1. 执行第一个script脚本事件宏任务,里面同步代码
  2. 遇到宏任务/微任务交给宿主环境,有结果回调函数进入对应队列
  3. 当执行栈空闲时,清空微任务队列,再执行下一个宏任务,从1再来

练习:事件循环经典题

运行结果:

4.Promise.all 静态方法

概念:合并多个Promise对象,等待所有同时成功完成(或某一个失败),做后续逻辑

语法:

 

需求:同时请求“北京”,“上海”,“广州”,“深圳”的天气并再网页尽可能同时显示

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Promise的all方法</title>
</head><body><ul class="my-ul"></ul><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>/*** 目标:掌握Promise的all方法作用,和使用场景* 业务:当我需要同一时间显示多个请求的结果时,就要把多请求合并* 例如:默认显示"北京", "上海", "广州", "深圳"的天气在首页查看* code:* 北京-110100* 上海-310100* 广州-440100* 深圳-440300*/// 1. 请求城市天气,得到Promise对象const bjPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '110100' } })const shPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '310100' } })const gzPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '440100' } })const szPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '440300' } })// 2. 使用Promise.all,合并多个Promise对象const p = Promise.all([bjPromise, shPromise, gzPromise, szPromise])p.then(result => {// 注意:结果数组顺序和合并时顺序是一致console.log(result)const htmlStr = result.map(item => {return `<li>${item.data.data.area} --- ${item.data.data.weather}</li>`}).join('')document.querySelector('.my-ul').innerHTML = htmlStr}).catch(error => {console.dir(error)})</script>
</body></html>

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

使用 FFMPEG 实现录屏和录音

FFmpeg 是一个非常强大的开源工具&#xff0c;它可以用来处理音频和视频。 要使用 FFmpeg 进行录屏和录音&#xff0c;需要首先确保你的系统已经安装了 FFmpeg。在大多数 Linux 发行版中&#xff0c;可以通过包管理器&#xff08;如 apt 或 yum&#xff09;来安装。在 Windows …

【Flask】Flask中HTTP请求与接收

一、接收http请求与返回响应 在Flask中&#xff0c;可以通过app.route装饰器来定义路由函数。 app.route(/BringGoods,methods [POST, GET]) GET请求&#xff1a;使用request.args.get(key)或者request.values.get(key)来获取URL中的参数。 POST请求&#xff1a; 使用req…

nginx配置挂载html

目标 很多软件的官方文档&#xff0c;在国内打开很慢&#xff0c;每次都得等很久&#xff0c;看到官方同时提供了html的包&#xff0c;所以想着挂载到本地nginx下&#xff0c;查看会方便很多。 下载官方html文档包&#xff0c;解压到documentation_htmls下 想添加新的文档也是…

【调制】π/4-DQPSK信号模型及其相关特性分析 【附MATLAB代码】

MATLAB代码 % pi/4-DQPSK modulation %输入一串数&#xff0c;输出经过差分并映射的I、Q两路数据 ​ function [I,Q]pi4_dqpskmod(data) ​ nlength(data)./2; data1data.*2-1; ​ Idatazeros(1,n); Qdatazeros(1,n); ​ ​ Idatadata1(1,1:2:2*n); %串并变换 Qdatadata1(…

yolo8目标检测+多目标跟踪算法实现车流量统计

目前常用的车流量统计方法包括基于虚拟区域和基于车辆跟踪的车流量统计方法&#xff0c;如下图所示。前者在视频帧中手动设定虚拟检测区域&#xff0c;通过判断虚拟检测区域的灰度值变化判断车辆是否经过&#xff0c;从而进行车流量统计。其中虚拟检测区域可以由点、线以及线圈…

如何理解自然语言处理中的位置编码(Positional Encoding)

在自然语言处理和特别是在使用Transformer模型中,位置编码(Positional Encoding)是一个关键的概念。它们的作用是为模型提供序列中各个元素的位置信息。由于Transformer架构本身并不像循环神经网络(RNN)那样具有处理序列的固有能力,位置编码因此显得尤为重要。 为什么需…

防爆轮式巡检机器人作用和优势?

在当今的工业领域&#xff0c;安全生产始终是至关重要的议题。而在一些具有爆炸风险的环境中&#xff0c;如石油、化工、燃气等行业&#xff0c;传统的人工巡检方式面临着诸多挑战。然而&#xff0c;随着科技的飞速发展&#xff0c;防爆轮式巡检机器人应运而生&#xff0c;为这…

(顶刊复现)基于配电网韧性提升的应急移动电源预配置和动态调度(上)—MPS预配置

参考文献&#xff1a; [1] Lei S , Chen C , Zhou H ,et al.Routing and Scheduling of Mobile Power Sources for Distribution System Resilience Enhancement[J].IEEE Transactions on Smart Grid, 2019:5650-5662.DOI:10.1109/TSG.2018.2889347. 这篇博客是上述SCI一区论文…

vue快速入门(三十四)组件data定义方法

注释很详细&#xff0c;直接上代码 上一篇 新增内容 数据绑定方法照常数据定义方法需要作为函数返回值 源码 MyTest.vue <template><div><h1>我的功德&#xff1a;{{merits}} </h1><button click"meritsnum1">功德加一</button>…

Linux - sed (stream editor) cp > bak备份 head

替换 my.yaml 的 ‘t’ 为 ‘AAA’ sed s/t/AAA/g my.yaml sed -n /^[as]/p my.yaml 这个命令的 -n 选项表示不自动打印每一行&#xff0c;/^[as]/p 是一个 sed 命令&#xff0c;/^[as]/ 是你想要匹配的正则表达式&#xff08;所有以 a | s 开头的行&#x…

sklearn 笔记 metrics

1 分类 1.1 accuracy_score 分类准确率得分 在多标签分类中&#xff0c;此函数计算子集准确率&#xff1a;y_pred的标签集必须与 y_true 中的相应标签集完全匹配。 1.1.1 参数 y_true真实&#xff08;正确&#xff09;标签y_pred由分类器返回的预测标签normalize 默认为 Tr…

A*B 问题

题目描述 输入两个正整数 A 和 B&#xff0c;求 AB 的值。注意乘积的范围和数据类型的选择。 输入格式 一行&#xff0c;包含两个正整数 A 和 B&#xff0c;中间用单个空格隔开。1≤A,B≤50000。 输出格式 一个整数&#xff0c;即 AB 的值。 输入输出样例 输入 #1 3 4 …

yolov8 区域声光报警+计数

yolov8 区域报警计数 1. 基础2. 报警功能2. 1声音报警代码2. 2画面显示报警代码 3. 完整代码4. 源码 1. 基础 本项目是在 yolov8 区域多类别计数 的基础上实现的&#xff0c;具体区域计数原理可见上边文章 2. 报警功能 设置一个区域region_points&#xff0c;当行人这一类别…

牛客NC195 二叉树的直径【simple DFS C++ / Java /Go/ PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/15f977cedc5a4ffa8f03a3433d18650d 思路 最长路径有两种情况&#xff1a; 1.最长条路径经过根节点&#xff0c;那么只需要找出根节点的左右两棵子树的最大深度然后相加即可。 2.最长路径没有经过根节点&#xf…

【Linux】对system V本地通信的内核级理解

一、system V版本的进程间通信技术 通过之前的学习&#xff0c;我们大致可以感受出来&#xff0c;共享内存&#xff0c;消息队列和信号量在使用的时候是有很多共性的。它们三个的接口&#xff0c;包括接口中传的参数有的都有很大的相似度。其实&#xff0c;共享内存&#xff…

Harmony OS应用开发性能优化全面指南

优化应用性能对于应用开发至关重要。通过高性能编程、减少丢帧卡顿、提升应用启动和响应速度&#xff0c;可以有效提升用户体验。本文将介绍一些优化应用性能的方法&#xff0c;以及常用的性能调优工具。 ArkTS高性能编程 为了提升代码执行速度&#xff0c;进而提升应用整体性…

IPRally巧用Google Kubernetes Engine和Ray改善AI

专利检索平台提供商 IPRally 正在快速发展&#xff0c;为全球企业、知识产权律师事务所以及多个国家专利和商标局提供服务。随着公司的发展&#xff0c;其技术需求也在不断增长。它继续训练模型以提高准确性&#xff0c;每周添加 200,000 条可供客户访问的可搜索记录&#xff0…

iOS ------代理 分类 拓展

代理协议 一&#xff0c;概念&#xff1a; 代理&#xff0c;又称委托代理&#xff08;delegate&#xff09;&#xff0c;是iOS中常用的一种设计模式。顾名思义&#xff0c;它是把某个对象要做的事委托给别的对象去做。那么别的对象就是这个对象的代理&#xff0c;代替它来打理…

安装eog照片查看程序

安装eog照片查看程序 apt-get install --reinstall liburi-perl apt-get install eog解决 参考文章

milvus对象存储和消息中间件的工厂设计模式分析

milvus对象存储和消息中间件的工厂设计模式分析 需求 根据参数设置创建mq和storage mq有kafka,pulsar storage有local,minio,remote 配置文件 根据配置文件选择初始化mq和存储: mq:type: pulsarcommon:storageType: minio对于这种类型一个是mq&#xff0c;一个是存储&…