ES6模块化:
太多的模块化规范给开发者增加了学习的难度和开发的成本,因为,官方制定了ES6模块化规范。取代了 AMD,CMD(浏览器端),CommonJS(服务器端)
ES6模块化规范中的定义:
- 每个 js 文件都是一个独立的模块
- 导入其他模块成员使用 import 关键字
- 向外共享模块化成员使用 export 关键字
在node中体验ES6模块化:
- 初始化包管理配置文件: cnpm init -y
- 在配置文件中增加配置选项: “type”: "module", 不加这一选项,默认type是commonjs
- node版本需要高于等于 v14.15.1
- 接受名称不能以数字开头
主要包含三种语法:
- 默认导出/入
- export default 默认导出的成员对象,多个导出成员用逗号分隔
- import 接受名称 from ‘ 模块标识符 ’
- 在每个模块中,只允许使用唯一的一次export default ,否则会报错
- 按需导出/入
- 语法: export 按需导出的成员
- import { 接受名称1,接受名称2 } from ‘ 模块标识符 ’
- 可以多次按需导出
- 按需导入的成员名称必须和按需导出的名称一致
- 按需导入时,可以使用as 关键字进行重命名
- 按需导入可以和默认导入一起使用
- 直接导入并执行模块中的代码
- import ‘ 模块标识符 ’
Promise:
- 是一个构造函数 new 出来的promise 实例对象代表一个异步操作
.then() 用来预先指定成功和失败的回调函数
- p.then(成功的回调函数,失败的回调函数)
- p.then( result=> { }, error=> { } )
- 成功的回调函数是必选的,失败的回调函数是可选的
- 通过 .then() 的链式调用,即可解决回调地狱的问题,因为,如果上一个.then() 中返回了一个Promise 对象,则可以通过下一个 .then() 继续进行处理
.catch() 如果发生了错误,可以使用 .catch() 进行捕获处理
- .catch( err => {} )
- 捕获到错误之后,前面的.then() 就不会被执行
- 如果不希望因为 .catch() 导致前面的 ,then() 不执行,可以将 .then 写在后面
.all() 会发起并行的 Promise 异步操作,等所有的异步操作全部结束后才会执行到下一步 .then 操作(等待机制)
promise 实例的顺序就是最后拿到结果的顺序:
另一种写法:
.race() 会发起并行的 promise 异步操作,只要任何一个异步操作完成,就会立即执行下一步的 .then 操作,(赛跑机制)
结果会返回执行结束最快的一个 promise 实例:
基于promise,自己封装一个读文件的操作:
要求:
getFile() 的基本定义:
创建具体的异步操作:
如何向用户返回成功或者失败的结果:
代码:
结果:
或者通过 .catch 也同样可以捕获到发生的错误:
async / await:
是ES8 引入的新语法,用来简化promise 的异步操作。
注意事项:
- 在function 中使用了 await,则function 必须被 async 修饰
- 在 async 之前的代码会同步执行,await 之后的代码都会被异步执行