js if else return不管用_前端知识013 学会异步,JS不再烧脑

2023-10-29

01 同步和异步

0101 认识同步异步

0102 前端经常遇到的异步操作(三个经典例子)

0103 拿到异步的结果 ---轮询和回调

0104 回调的几种方式

02 Promise

0201 Promise基本用法

0202 Promise 基本API

0203 自己写一个Promise的套路

0204 await/ async

0205 手写Promise

面试的时候经常问到JS异步的理解,那究竟什么是异步代码呢?

当我最开始看到异步的时候,我的脑海里浮现的是操作系统当中进程同步和进程异步的内容。我把这部分带入到JS当中,就很容易理解到到底什么是异步。

01 同步和异步

0101 认识同步异步

在我们传统的 “命令式” 编程语言中,我们的思考逻辑往往是像序列一样的一个事情做完了,然后再做下一个事情。翻译成人话就是,我们平常写代码的逻辑就是一行执行完了再执行下一行,一个程序就是由一组命令序列组成。

这样的代码很容易理解,但是,JavaScript 在设计阶段为了保证线程安全并且保证引擎不会被 IO 等待所阻塞导致页面失去响应,于是就向其他 GUI 程序学习了“异步事件模型”,所以“异步事件模型” 是一种解决多线程并行问题的模型。翻译过来就是如果按照同步的方式工作,JS引擎会有大量的无效运算时间。这个空闲等待时间是对资源的大幅度浪费,我们时候不能容忍的。所以我们引入异步机制,使得JS引擎的空闲时间多了很多,JS引擎空闲的这段时间,是浏览器在进行计时工作。

首先我们来看什么是同步:

console.log(1)
console.log(2)
console.log(3)

浏览器顺序打印出来1—>2—>3 这就是。这是按照代码顺序执行的

console.log(1)
setTimeout(()=>{
    
 console.log(2)
},1000)
console.log(3)

浏览器顺序打印出来1—>3—>2,这个时候 setTimeout(()=>{ console.log(2)},1000) 这部分代码就是异步执行了。

所以总结来说同步就是等任务执行完,得到结果,才执行下一个任务。异步等任务执行完,直接执行下一个任务

0102 前端经常遇到的异步操作

例子01

document.getElementsByTagNameNS('img')[0].width //0
console.log('done')

此时得到的宽度是0,因为图片是异步加载的

我们修改代码使用异步方式

document.getElementsByTagNameNS('img')[0].onload = function(){
    
    console.log(this.width) //不是0
    console.log('real done')
}
console.log('done')

例子02

let liList = document.querySelector
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js if else return不管用_前端知识013 学会异步,JS不再烧脑 的相关文章

随机推荐

  • 堆和栈的区别(转过无数次的文章)

    一 预备知识 程序的内存分配 一个由C C 编译的程序占用的内存分为以下几个部分 1 栈区 stack 由编译器自动分配释放 存放函数的参数值 局部变量的值等 其 操作方式类似于数据结构中的栈 2 堆区 heap 一般由程序员分配释放 若程
  • unity Texture2d Base64 相互转换

    Base64ToTexture2D public Texture2D Base64ToTexture2D string Base64STR Texture2D pic new Texture2D 190 190 TextureFormat
  • java连接数据库

    学习目标 java连接数据库 学习内容 导入Jar驱动包 1 然后右击项目文件夹 打开模块设置 2 打开后按一下方式操作 3 找到刚才粘贴的jar包选择 4 勾选应用 2 注册驱动 Class forName com mysql jdbc
  • 使用setStyleSheet来设置图形界面的外观

    关于QPushButton的问题 hover press我用setStyleSheet为一个QPushButton贴了一个背景图片 但是 当点了按钮之后 会出现虚线框 这样看起来就很丑 不逼真了 我不希望这个虚线框出现 有什么好的解决方法吗
  • Python利用POP3/SMTP服务自动发送qq邮件

    自动发送qq邮件的两种方法 第一种 POP3 SMTP服务发送qq邮件 废话不多说 直接上代码 coding utf 8 import smtplib from email mime text import MIMEText from em
  • HTML页面

    HTML 1 资源分类 1 1 静态资源 使用静态网页开发技术发布的资源 特点 所有用户访问 得到的结果是一样的 如 文本 图片 音频 视频 HTML CSS JavaScript 如果用户请求的是静态资源 那么服务器会直接将静态资源发送给
  • [每日两题系列]刷算法题咯~~

    今日题目 判定是否互为字符重排 最后一块石头的重量 本系列所选题目均来自力扣或者牛客网站 所选题目主要是以其中的简单题为主 中等题为辅 包含少数困难题 原因是 本人目前能力还不够 开展这个系列的目的是督促自己 在暑假的时间里也要保持有一定的
  • #define用法总结

    刚开始接触VC 的同学们 估计对这个东西有这莫大的恐惧 这个经常写在添加头文件的地方的奇怪语句 如果看过mfc那么 那么拿出一些application framework里面的宏 估计会吓死一片 说了这么多只是想说 不明白其用法的人很害怕
  • 经典法谱估计(1)周期图法MATLAB及Python实现

    原理 对于一个无限长序列x n 其傅里叶变换DTFT 也可称作离散时间傅里叶变换 及其反变换的定义式为 但是在我们的分析处理过程中 只能分析处理离散化的信号 也即N点取样 对于一个长度为N的有限长序列x n 其离散傅里叶变换及其反变换的定义
  • osgEarth的Rex引擎原理分析(一二一)osgEarth::TileRasterizer功能详解

    目标 五十二 中的问题123 本质是一个相机 用于将下面的节点渲染到纹理中 src osgEarth TileRasterizer class OSGEARTH EXPORT TileRasterizer public osg Camera
  • 神经网络面试题-1

    文章目录 1 批规范化 Batch Normalization 的好处都有啥 2 如果我们用了一个过大的学习速率会发生什么 3 下图所示的网络用于训练识别字符H和T 如下所示 4 增加卷积核的大小对于改进卷积神经网络的效果是必要的吗 5 假
  • maven跳过单元测试-maven.test.skip和skipTests的区别

    原文链接 http blog csdn net arkblue article details 50974957 DskipTests 不执行测试用例 但编译测试用例类生成相应的class文件至target test classes下 Dm
  • 【Linux C小技巧】零长度数组的使用

    本期主题 讲清Linux C的零长度数组使用 内容包括 零长度数组是什么原理 为什么要使用零长度数组 与指针的差异 往期链接 数据结构系列 先进先出队列queue 数据结构系列 栈 stack Linux内核链表 目录 0 前言 1 零长度
  • git上传代码到github

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1219 一 首先在windows上安装msysgit 1 msysgit下载地址如下 链接 https pan baidu com s 1T
  • 小米红米手机刷入Recovery手机教程-TWRP下载-获取root权限-新增小米12/13Pro适配

    刷机注意 本教程为小米全机型 目前已整理机型都可以使用 请确保你的电脑能正确连接你的手机 部分手机需要解锁BL 小米解锁BL教程 http www romleyuan com lec read id 83 更新日志 20230221更新日志
  • 【atoi函数的介绍以及模拟实现】

    目录 前言 一 atoi函数测试 1 要求 2 测试 二 atoi函数模拟实现 三 补充 前言 位置 atoi函数包含在
  • 天地图服务与开发

    天地图服务与开发 天地图在线地图网址 2021年7月2日 国家地理信息公共服务平台天地图2021版正式启用 传统版地址 https map tianditu gov cn 2020 新版地址 https map tianditu gov c
  • ssh telnet linux中显示中文

    vi etc sysconfig i18n 将内容改为 LANG zh CN GB18030 LANGUAGE zh CN GB18030 zh CN GB2312 zh CN SUPPORTED zh CN GB18030 zh CN z
  • office中excel设置下拉框多选

    我参照了这篇文章 https www php cn topic excel 444717 html 这篇文章整体写得不错 但是有些小瑕疵 问题1 在模块1中保存 这里并没有说清楚 具体是 VBA编辑器中 插入 模块 然后复制以下代码 Pub
  • js if else return不管用_前端知识013 学会异步,JS不再烧脑

    01 同步和异步 0101 认识同步异步 0102 前端经常遇到的异步操作 三个经典例子 0103 拿到异步的结果 轮询和回调 0104 回调的几种方式 02 Promise 0201 Promise基本用法 0202 Promise 基本