Callback(异步操作)
异步操作不会立马执行,优先同步操作
实际中应避免回调地狱
Promise then
promise就是为了解决“回调地狱”问题的,他可以优雅地处理异步操作
举个例子:
加载1.js,如果没有发生错误;
加载2.js,如果没有发生错误;
加载3.js,如果没有发生错误——做其他操作
1 | function loadScript (src) { |
Promise的基本语法
Resolve & Reject (异步操作)
promise提供的两个静态方法,需通过promise调用
1 | new Promise(function(resolve,reject){...}) |
通过创建Promise对象开启一个异步操作的过程,一般用几部完成多次异步操作:
- new Promise(fn) 返回一个Promise对象
- 在fn中指定异步等处理
- 处理结果正常的话,调用resolve(处理结果值)
- 处理结果错误的话,调用reject(Error对象)
1 | function test (bool) { |
Catch(异步操作)
捕获异步操作过程中出现的任何异常
基本语法
1 | p.catch(onRejected) |
示例
1 | function loadScript (src) { |
All(异步操作)
不分先后,只接受数据
promise.all 生成并返回一个新的Promise对象,所以它可以使用Promise实例的所有方法。参数传递promise数组中的所有promise对象都变为resolve的时候,该方法才会返回,新建的promise则会使用这些promise的值。
如果参数中任何一个promise为reject的话,则整个promise.all调用会立即终止,并返回一个reject的新的对象
1 | const p1 = Promise.resolve(1) |
Race(异步操作)
先到先得
1 | const p1 = () => { |
Reflect.apply(反射机制)
Java的反射机制是在编译阶段不知道是哪个类被加载,而是在运行的时候才加载、执行
1 | //Math.floor这个函数应用到null作用域上,参数为3.72 |
Reflect.construct(反射机制)
用反射机制去动态实例化一个类
Reflect.construct( )方法的行为有点像 new 操作符 构造函数,相当于运行new target(…args)
1 | let d = Reflect.construct(Date, [1776,6,4]) |
reflect与object的区别:返回值不同
Reflect.getOwnPropertyDescriptor等(反射机制)
1 | const obj = { x: 1, y: 2 } |
proxy basic syntax(该怎样使用代理功能)
语法
1 | let p=new Proxy(target,handler) |
通俗的讲第一个参数target就是用来代理的“对象”,被代理之后他是不能直接被访问的,而handler就是实现代理的过程。
主要业务做信息的读取
1 | let o = { |
Schema Validation(写操作进行拦截)
1 | let o = { |
ES5中禁止写入的写法,完全锁死
1 | for (let [key] of Object.entries(o)) { |
更复杂的例子
1 | //监听错误 |
不同的实例对象每次生成的值唯一,且不能被修改
1 | class Component { |
Revocable Proxy
撤销代理,让代理失效
1 | let o = { |