ES6模块化与异步编程

1、ES6模块化规范
  • 每个js文件都是一个独立的模块

  • 导入其他模块成员使用import关键字

  • 向外共享模块成员使用export关键字

2、Node使用ES6模块化

(1)node.js版本要高于v14.15.1

(2)在package.json中根节点加上"type": "module"

3、默认导出导入

(1)默认导出(只能使用一次export default)

// export default = {要导出的内容}
let a = 10
let b = 20
function show() {}
export default = {
  a,
  show
}

(2)默认导入(变量名要符合规范)

// import 模块名 from 导入的模块
import m1 from './默认导出.js'
4、按需导出导入

(1)按需导出

export let a = 'hello '
export let b = 'world'
let c = 'kitty'
export function say(a, b) {
  console.log(a + b)
}

(2)按需导入

import { a, b, say } from './按需导出.js'

(3)注意事项

每个模块中可以多次按需导出

按需导入必须与按需导出的变量名称一致

按需导出可以和默认导出一起使用

可以使用as给按需导入的变量重命名,重命名后必须是用新名称

5、直接导入并执行模块中的代码

如果只想运行某个模块中的代码,不想得到其中导出的内容,可以直接运行

import '要导入的文件'

不管是按需导入,还是默认导入,只要导入模块,其中的代码都会自动执行

6、Promise(ES6新增对象)

(1)回调地狱:多层回调函数相互嵌套(代码的耦合性太强,难以维护;大量冗余代码嵌套,阅读性差)

(2)Promise

  • Promise是一个构造函数,new出来的Promise实例对象代表一个一步操作:const p = new Promise()

  • Promise.prototype上包含一个.then()方法,可以通过原型链的方式访问到

  • .then()方法用来预先制定成功和失败的回调函数

    // p.then(成功的回调, 失败的回调)
    // 调用.then()方法时,成功的回调函数是必选的,失败的回调函数是可选的
    p.then(result => {}, error => {})
    

(3).then()的特性

如果上一个.then()返回一个Promise对象,则可以使用下一个.then()为Promise对象设置处理函数

(4).catch():捕获执行时发生的错误

(5)Promise.all()会发起并行的Promise异步操作。执行完所有的操作才会执行.then()

(6)Promise.race()发起并行的Promise异步操作,谁执行最快结果为哪个

(7)async/await

作用:简化Promise.then()的调用

  • async将一个普通函数声明称为异步函数,用await声明的Promise对象,会返回.then()执行后的返回值

  • 用async声明的函数,在第一个await之前是同步执行的,await开始为异步执行

7、事件循环

(1)JS是单线程执行的,在主线程上会有同步和异步任务,碰到异步任务会交给宿主环境执行,主线程先执行同步任务

(2)宿主环境执行完异步任务之后,会将还没有执行的回调函数放入事件队列中等待执行

(3)主线程上的同步任务执行完后,会查看任务队列中是否有待执行的任务,如果有,将任务队列中的任务在主线程上执行

(4)然后进行事件循环,重复之前的操作

8、宏任务和微任务

(1)异步任务分为宏任务和微任务

(2)宏任务:异步Ajax请求、定时器、文件操作、其它宏任务

(3)微任务:.then()/catch()/finally()、process.nextTick、其它微任务

(4)微任务~宏任务1~微任务~宏任务2~微任务……

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容