ES6新特性
- let变量,const常量,有块级作用域,let,const不能重复声明一个已经声明过的变量,不管使用什么声明的(let,const,var),let声明的变量可以重新赋值,const不允许重新赋值,所以,let可以先声明后赋值,但是const必须声明且赋值。还有一点需注意:
const 阻止的是对于变量绑定的修改,而不 阻止对成员值的修改。const a = 1;此时对a的再次赋值就会报错;const person = {name:'1'},person.name='2'不会报错,但是person={name:'2'}就会报错
- - 箭头函数,函数内外的this指向是一致的
- - 模板字符串,反引号 **` ** 标识,可以有空格(let age=10;let str=`你好,我已经${age}岁了`)
- - 解构赋值,数组中可以嵌套,可以有空值,可以有剩余运算符
let node = { type: "Identifier", name: "foo" }; let { type, name } = node; console.log(type); // "Identifier" console.log(name); // "foo"
let colors = [ "red", "green", "blue" ]; let [ firstColor, secondColor ] = colors; console.log(firstColor); // "red" console.log(secondColor); // "green"
- - import引入和export的导出
- - ...展开符,可以将数组或者对象里面的值展开,也可以将多个值收集为一个变量
- - async,await同步和异步方法
- - promiss语法
- - set数组去重
let arr=[12,43,23,43,68,12];
let item=[...new Set(arr)];
console.log(item);//[12,43,23,68]
特别promise封装axios,promise,setTimeout,fn,宏任务和微任务,
回调地狱
第一种使用ES6中的Promise,中文翻译过来承诺,意思是在未来某一个时间点承诺返回数据给你。
但是如果数据多的,依赖多的情况下,还是会产生回调地狱的既视感,那这时候就用到了es7的async,await了
promise
原理:
- 在Promise的内部,有一个状态管理器的存在,有三种状态:pending、fulfilled、rejected。
- (1) promise 对象初始化状态为 pending。
- (2) 当调用resolve(成功),会由pending => fulfilled。
- (3) 当调用reject(失败),会由pending => rejected。
- 需要记住的是注意promsie状态 只能由 pending => fulfilled/rejected, 一旦修改就不能再变。
原文链接:https://blog.youkuaiyun.com/HannaLh/article/details/106151149
特点:
- promise是一个对象,对象和函数的区别就是对象可以保存状态,函数不可以(闭包除外)一旦状态改变,就不会再变,任何时候都可以得到这个结果
- 对象的状态不受外界影响,只有pending,fulfilled,rejected三种状态
- 代码风格,容易理解,便于维护
- 多个异步等待合并便于解决
缺点:
- 无法取消
Promise
,一旦新建它就会立即执行,无法中途取消 - 如果不设置回调函数,
Promise
内部抛出的错误,不会反应到外部 - 当处于
pending
状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
Promise有三种状态:pending/reslove/reject 。pending就是未决,resolve可以理解为成功,reject可以理解为拒绝。
同时Promise常用的三种方法
- then 表示异步成功执行后的数据状态变为reslove
- catch 表示异步失败后执行的数据状态变为reject
- all表示把多个没有关系的Promise封装成一个Promise对象使用then返回一个数组数据。
- resolve成功的回调
- reject失败的回调
Promise.all() 批量执行
Promise.all([p1, p2, p3])用于将多个promise实例,包装成一个新的Promise实例,返回的实例就是普通的promise
它接收一个数组作为参数
数组里可以是Promise对象,也可以是别的值,只有Promise会等待状态改变
当所有的子Promise都完成,该Promise完成,返回值是全部值得数组
有任何一个失败,该Promise失败,返回值是第一个失败的子Promise结果
Promse.race
Promse.race就是赛跑的意思,意思就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
Promise.allSettled()
当Promise
全部处理完成后我们可以拿到每个Promise
的状态, 而不管其是否处理成功.
以上引用:https://segmentfault.com/a/1190000020034361
阮一峰老师:https://es6.ruanyifeng.com/#docs/promise
事件循环机制,promise的使用,