es6模块化基本语法
每一个文件都是一个模块
一:es6模块化语法在node.js中如何实现
第一步打开终端:执行 npm init -y命令
先初始化,会有一个package.json的json文件
文件内部
设置配置,将type改为”module“
这样就可以在node.js中使用es6模块化语法了
二:es6模块化语法中的模块导入和导出
es6中模块导入和导出分为默认导出导入和按需导入导出。
1,默认导出默认导入
默认导出:export default{}
代码如下:
将变量n1,函数show导出
默认导入:import 模块命 from ”导入模块路径“
注意:每个模块内只能使用一次默认导出exports default{}
2,按需导出按需导入
按需导出:export
向外导出变量 x,y,函数getx
一个模块可以多次使用多次按需导出
一个模块可以按需导出和按需导出一起使用
按需导入:export
导入x,y,getx
按需导入的名称要和按需导入的名称保持一致
关键字:as
将按需导入的名称重命名
列:将按需导入的名称y重命名为z
直接执行模块中的代码
index.js文件中的代码
在dome.js文件中执行
执行:在终端执行 node dome.js 命令
三:promise
1,经典问题回调地狱
一个回调函数的内部出现多重会回调函数嵌套;导致代码的大量冗余,难以维护
可以通过promise解决回调地狱问题
2,什么是Promise
Promise是一个构造函数(用 new 关键字来调用的函数,称为构造函数。构造函数首字母一般大写)
可以通过new实例化
new出来的romise实例对象,代表一个异步操作
promise原型的包含一个.then()方法。
每一次通过new promise()构造函数都可以得到实例对象
每个实例对象都可以通过原型链的方式访问.then()方法
什么是.then()
.then()可以预先指定成功和失败的回调函数
proimes函数.then(成功的回调函数,失败的回调函数)
调用.then()方法成功回调是必选的,失败的回调是可选的
.then()方法特性
如果上一个.then()返回了一个promise函数,则在后面可以继续使用.then()
方法,就可以通过链式编程解决回调地狱问题
.cathr()捕获错误
注意:如果在Promise链式编程中出现错误,则就会导致后续代码无法执行。想要后续代码继续执行,则调用.cathr()方法捕获错误,
.catch ( err => { })
promise.all方法,(等待机制)
promise.all()会并发执行promise异步操作,等待所有的异步操作全部执行完后,才执行.then()方法,
Promise.race()方法(赛跑机制)
Promise.race()也会并发执行Promise异步操作,只要任何一个Promise异步操作执行完就会执行下一步的.then(),赛跑机制
async/await
async/await用来简化Promise异步操作,
如果一个函数内部有await修饰了,则必须搭配async一起使用
一个方法的返回值是一个promise实例对象就可以用await修饰
await修饰后的方法返回值就不再是promise实例对象了,就是一个值
四,同步任务,异步任务
同步任务:1:即非耗时任务,指在主线程上排队的那些任务,
2:只有亲一个任务执行完,才执行下一个任务。
异步任务:1:即耗时任务,异步任务由JavaScript委托给宿主环境执行
2:当异步任务执行完后,会通知JavaScript主线程执行异步任务的回调函数
1:同步和异步的执行过程
1:同步任务由JavaScript主线程次序执行
2:异步任务交给宿主环境执行
3:已执行完的异步任务对应的回调的函数,会被加入到任务队列中等待执行
4:JavaScript主线程的执行栈被清空后,会读取任务队列中的回调函数,次序执行
5:JavaScript主线程会不断重复以上4个步骤
2:什么是EventLoop(事件循环)
JavaScript主线程从任务对列中读取异步任务的回调函数,放到栈中依次执行。这个过程不断循环,这种记住就是EventLoop(事件循环)
3:宏任务和微任务
JavaScript把异步任务分为宏任务和微任务。
1:宏任务:ajax请求,seTimeout,setInterval,文件操作,I/O,UI Rendering,其他
2:微任务:Promise.then, .catch, .finally ,prscess.nextTick 。其他
宏任务微任务的执行顺序