ES6模块化规范

在此之前,JavaScript社区已经提出AMD、CMD、CommonJS等模块化规范。

社区的规范标准存在一定的差异性和局限性、并不是浏览器和服务器通用的模块化。

ES6模块化规范中定义:

  1. 每个js文件都是一个独立的模块
  2. 导入其他模块成员使用import关键字
  3. 向外共享模块成员使用export关键字

node版本高于v14.15.1才支持ES6模块化语法

在package.json的根节点中添加"type":"module"节点

ES6基本语法

  • 默认导出与默认导入
  • 按需导出与按需导入
  • 直接导入并执行模块中的代码
默认导出

export default 默认导出的成员

注意事项:只允许使用一次默认导出。

默认导入

import 接收名称 from '模块标识符'

注意事项:导入命名时,不能使用数字开头。

按需导出

export

按需导入

import {} from '模块标识符'

基于then-fs读取文件内容

由于node.js官方提供的fs模块仅支持以回调函数的方式读取文件,不支持Promise的调用方式。因此,需要先安装then-fs这个第三方包,从而支持我们基于Promise的方式读取文件的内容。

readFile().then()进行异步读取文件。

可以通过.then()函数的链式调用,解决回调地狱的问题。同时保证文件的读取顺序。

通过.catch()可以捕获链式调用中产生的错误。

Promise.all()

此方法会发起并行的Promise异步操作,等所有的异步操作全部结束后才会执行下一步的.then操作

Promise.race()

此方法会将最快执行出结果的异步操作取出,执行后续操作。

async/await

  • function中使用了await,则function必须被async修饰
  • async方法中,第一个await之前的代码会同步执行,await之后的代码会异步执行。

EventLoop

  1. 同步任务:又叫非耗时任务,指的是在主线程上排队执行的那些任务。只有前一个任务执行完毕,才能执行后一个任务。
  2. 异步任务:又叫耗时任务,异步任务由JavaScript委托给宿主环境进行执行。当异步任务执行完成后,会通知JavaScript主线程执行异步任务的回调函数。
异步任务划分为:宏任务、微任务
  1. 宏任务:异步Ajax请求、setTimeout、setInterval、文件操作、其他宏任务
  2. 微任务:Promise.then、.catch、.finally、process.nextTick、其他微任务