异步解决方案良药Promise
promise
目前比较流行的异步解决方案,本质上是一个构造函数
1、状态
promise有三种状态,初始的状态都是pedding,包括成功的状态失败的状态还有等待的状态
- promise.all()所有的promise对象成功才会触发成功的状态,否则失败状态
- promise.race()任意一个子promise的状态触发后
2、出现的原因
我们来通过一个例子来说明一下异步调用的问题
let url1 = 'http://xxx.xxx.1';$.ajax({ url:url1, error:function (error) {}, success:function (data1) { console.log(data1); }});
那当我们发出多个请求的时候就只能以嵌套的方式来解决
let url1 = 'http://xxx.xxx.1';let url2 = 'http://xxx.xxx.2';let url3 = 'http://xxx.xxx.3';$.ajax({ url:url1, error:function (error) {}, success:function (data1) { console.log(data1); $.ajax({ url:url2, data:data1, error:function (error) {}, success:function (data2) { console.log(data2); $.ajax({ url:url3, data, error:function (error) {}, success:function (data3) { console.log(data3); } }); } }); }});
3、主要的问题
- 代码臃肿。
- 可读性差。
- 耦合度过高,可维护性差。
- 代码复用性差。
- 容易滋生 bug。
- 只能在回调里处理异常。
4 、Promise 的使用
构造函数
Promise 是一个构造函数,使用 new 操作符返回一个 promise 对象
构造函数接收一个 excutor 函数作为参数
excutor 函数有两个函数类型的参数 resolve 和 reject