Promise与事件循环(EventLoop)

Promise(重点)

1.同步代码和异步代码,

(1)同步代码:代码一行行的书写 执行是从上而下执行 上面的代码没有执行后面代码不能执行(阻塞) 互相依赖
(2)异步代码,代码一行行的书写 执行不是从上而下执行 上面的代码没有执行不影响后面的代码执行(非阳塞) 操作不互相依赖
(3)赘述:异步代码通过回调函数返回结果的

2.回调地狱(异步的)

定义:回掉函数的嵌套
缺点:可读性差,捕获异常困难,耦合性(代码的结构关联性太强了)

3.解决回调地狱

1.Promise.then(res=>{return new Promise()}).then().then().then()

4.解决链式调用

  1. async await 为了让Promise的链式调用更加简洁明了的一种写法
  2. await为了简化Promise的then方法
  3. 在用await的时候,必须使用async来修饰函数
  4. async只能用来修饰函数

5.捕获 async和await的错误

1.try…catch(err=>{})

事件循环(EventLoop)

概念:(什么是事件循环)
主要用来负责执行代码、收集和处理事件以及执行队列中的任务
原因:
JavaScript 单线程(某一刻只能执行一行代码),为了让耗时代码不阻塞其他代码运行,设计了事件循环模型
事件循环 - 执行过程
定义:执行代码和收集异步任务的模型,在调用栈空闲,反复调用任务队列里回调函数的执行机制,就叫事件循环
为什么有事件循环?
js是单线程的语言,为了不阻塞js引擎代码的执行。
js内代码如何执行?
1 现在执行栈中执行同步代码
2 遇到异步任务,把它放到 宿主环境(浏览器环境、js引擎)中执行
3等执行栈空闲的时候,把队列中的异步任务的回调函数放在执行栈中执行
4.等执行栈再次空闲,再次去任务队列中获取异步任务的回调函数放在执行栈中执行
5 反复多次 就形成了事件循环
事件循环的执行机制
js的代码执行在浏览器中,在浏览器中有执行栈,浏览器宿主环境,宏任务队列,微任务队列。代码有同步代码,异步代码
当事件循环模型碰到同步代码的时候,放到执行栈中执行,
当事件循环模型碰到异步代码的时候,看看是什么异步代码,
如果是宏任务(js标签,定时器,ajax,事件)的时候,就把异步任务放到浏览器等待执行,把执行的结果放到宏任务队列中等待执行栈调用。
如果是微任务(Promise的then方法的回调函数)的时候,就把该异步任务放到js引擎的微任务队列中等待执行,把执行的结果放到执行栈中调用

异步任务分为:
宏任务:由浏览器环境执行的异步代码(js标签,定时器,ajax,事件)
Promise与事件循环(EventLoop)_第1张图片

微任务:由js引擎环境执行的异步代码(Promise,mutaionObserver,process.nextTick)
例如:Promise对象.then()的回调
Promise与事件循环(EventLoop)_第2张图片
Promise与事件循环(EventLoop)_第3张图片
Promise.all静态方法(重要:记得再搜几个哦!)
Promise与事件循环(EventLoop)_第4张图片

在这里插入图片描述

Promise的常用方法( 一假则假 一真则真 ! 取反 )

接受成功的结果
1.Promise.prototype.then
2.Promise.prototype.catch 接受失败的结果
3.Promise.all(); 全成功才成功 有失败即失败
4…Promise.any(); 有成功就成功 全失败才失败
5.Promise.race();看谁快 按谁来(跑的快的成功就算成功 跑的快的失败就算失败)
6.Promise.reject(); 控制Promise的状态 从Pending -> Rejected
7.Promise.resolve();控制Promise的状态 从Pending -> Fullfilled
promise都有哪些⽅法
then成功的回调
.catch失败后的回调
.finally不论成功失败都会执⾏的回调
.all⼀次发起多个请求,等待所有的全部响应
.race⼀次发起多个请求,等待最快的响应
http常见的状态码
100 => 正在初始化(⼀般是看不到的)
101 => 正在切换协议(websocket 浏览器提供的)
200 => 请求成功
201 => 创建成功
202 => 表示接受
301 => 永久重定向/永久转移
302 => 临时重定向/临时转移(⼀般⽤来做服务器负载均衡)
304 => 本次获取的内容是读取缓存中的数据,会每次去服务器校验
400 => 请求格式错误
401 => 未认证,没有登录⽹站
403 => 禁⽌访问,没有权限
404 => 请求地址不存在

500 => 服务器遇到⼀个⽆法完成的请求
502 => 充当⽹关或代理的服务器,从远端服务器接收到了⼀个⽆效的请求
503 => 服务器超负荷(假设⼀台服务器只能承受 10000 ⼈,当第 10001 ⼈访问的时候,
如果服务器没有做负载均衡,那么这个⼈的⽹络状态码就是 503)
505 => 服务器不⽀持请求的 HTTP 协议的版本,⽆法完成处理。
Promise的特性:
创建⽴即执⾏,状态不可逆,必须有回调函数

你可能感兴趣的:(javascript,前端,java)