Promise#then
和 Promise#catch
这两个方法来结果,除此之外其他的方法都是不可用的,这样使得异步处理操作更加容易。
4、基本用法
在 ES6 中,可以使用三种办法创建 Promise 实例(对象)
(1). 构造方法
let promies = new Promise((resolve, reject) => { resolve(); //异步处理 });
Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是 resolve 和 reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
(2). 通过 Promise 实例的方法,Promise#then 方法返回的也是一个 Promise 对象
promise.then(onFulfilled, onRejected);
(3). 通过 Promise 的静态方法,Promise.resolve(),Promise.reject()
var p = Promise.resolve(); p.then(function(value) { console.log(value); });
4.1 Promise 的执行流程
- new Promise构造器之后,会返回一个promise对象;
- 为 promise 注册一个事件处理结果的回调函数(resolved)和一个异常处理函数(rejected);
4.2 Promise 的状态
实例化的 Promise 有三个状态:
Fulfilled: has-resolved, 表示成功解决,这时会调用 onFulfilled.
Rejected: has-rejected, 表示解决失败,此时会调用 onRejected.
Pending: unresolve, 表示待解决,既不是resolve也不是reject的状态。也就是promise对象刚被创建后的初始化状态.
上面我们提到 Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是 resolve 和 reject.
resolve函数的作用是,将 Promise 对象的状态从 未处理 变成 处理成功 (unresolved => resolved), 在异步操作成功时调用,并将异步操作的结果作为参数传递出去。
reject函数的作用是,将 Promise 对象的状态从 未处理 变成 处理失败 (unresolved => rejected), 在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
Promise 实例生成以后,可以用 then 方法和 catch 方法分别指定 resolved 状态和 rejected 状态的回调函数。
以下是 Promise 的状态图
4.3 Promise 的基本特性
【1】 对象的状态不受外界影响 Promise 对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。 只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。 这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法变。