ES6模块化与异步编程高级用法 ----- Vue铺垫知识

1. ES6模块化

模块化的优点:大家都遵循同样的模块化规范写代码,降低沟通成本,极大方便了各个模块之间的相互调用。

回顾:Node.js中如何实现模块化(Node.js遵循了CommonJS的模块化规范)

  • 导入其他模块使用 require() 方法
  • 模块对外共享成员使用module.exports对象
    在这里插入图片描述

1.1 什么是ES6模块化规范

在这里插入图片描述
在node.js中实现ES6模块化:
在这里插入图片描述

1.2 ES6模块化的基本语法

1.2.1 默认导出和默认导入
  • 默认导出: export default 默认导出的成员
    注意:每个模块中,只允许使用唯一的一次export default,否则会报错!
  • 默认导入: import 接收名称 from '模块标识符'
    默认导入时的接收名称可以是任意名称,只要是合法的成员名称即可

在这里插入图片描述
在这里插入图片描述

1.2.2 按需导出和按需导入
  • 按需导出语法: export 按需导出的成员
  • 按需导入语法: import {s1} from '模块标识符'

注意事项:

  • 每个模块中可以使用多次按需导出
  • 按需导入的成员名称必须和按需导出的名称保持一致
  • 按需导入时,可以使用as关键字进行重命名
  • 按需导入可以和默认导入一起使用

在这里插入图片描述
在这里插入图片描述

1.2.3 直接导入并执行模块中代码

直接 import 路径 即可,不需要用from接收
在这里插入图片描述

2. Promise

2.1 回调地狱

多层回调函数的相互嵌套,就形成了回调地狱。
缺点:

  • 代码耦合性太强,牵一发而动全身,难以维护
  • 大量冗余的代码相互嵌套,代码的可读性变差

2.2 Promise的基本概念

ES6新增了Promise(支持链式调用)来解决回调地狱问题

  • Promise是一个构造函数
    可以创建 Promise 实例 const p = new Promise()
    new出来的 Promise实例对象,代表一个异步操作
  • Promise. prototype 上包含一个 .then() 方法
    每次new Promise()构造函数得到的实例对象,都可以通过原型链的方式访问到 .then() 方法,例如 p.then()
  • .then() 方法用来预先指定成功和失败的回调函数
    p.then(成功的回调函数—必选,失败的回调函数—可选)
    p.then(result => { }, error => { })
  • .then() 方法的特性
    如果上一个.then() 方法 return 返回了一个新的Promise实例对象,则可以通过下一个.then() 继续处理。 通过.then() 方法的链式调用,就解决了回调地狱问题

2.2 Promise方法

.catch捕获错误

在Promise的链式操作中如果发生了错误,可以使用 Promise.prototype.catch 方法进行捕获和处理
在这里插入图片描述

Promise.all()方法

会发起并行的Promise异步操作,等所有的异步操作全部结束后才会执行下一步的 .then 操作(等待机制)。

Promise.race()方法

会发起并行的Promise异步操作,只要任何一个异步操作完成,就立即执行下一步的.then 操作(赛跑机制)

2.3 基于Promise封装读文件方法

方法封装要求

  • 方法的名称要定义为 getFile
  • 方法接受一个形参 fpath,表示要读取的文件路径
  • 方法的返回值为Promise实例对象

getFile方法的基本定义:
在这里插入图片描述

创建具体的异步操作:
在这里插入图片描述

2.4 获取 .then 的两个实参

在这里插入图片描述
调用 resolve 和 reject 回调函数
在这里插入图片描述

3. async / await

在 async / await 出现之前,开发者只能通过 链式. then() 的方式处理Promise异步操作。. then() 链式调用可以解决回调地狱问题,但是代码冗余、阅读性差,不易理解。
async / await 是 ES8 引入的新语法,用来简化 Promise 异步操作

使用注意事项:

在这里插入图片描述

4. EventLoop

EventLoop 事件循环,是一个不断进行循环的机制,会不断去寻找可以执行的任务来执行。
在执行完同步任务之后(清空了调用栈后),首先会优先执行微任务队列的任务(先入先出规则),把微任务队列的任务清空以后才会去执行下一轮宏任务,并不是把宏任务全部执行了再执行微任务,这样就可以避免因为宏任务繁重导致任务的阻塞,所以下面黑马的PPT讲解私以为不太妥当,应该加前提。
在这里插入图片描述

在这里插入图片描述
同步任务和异步任务:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 宏任务和微任务

异步任务分为:宏任务 + 微任务(队列按照先入先出规则)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

宏任务执行之前,先检查是否有待执行的微任务;
只要new Promise就会立即执行里面的函数,所以56行是同步任务;
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值