异步解决方案良药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