ES6系列教程之Promise
技术、总结 Mar 11, 2018
Promise是异步编程的一种解决方案,能够解决传统的异步解决的回调陷阱问题。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
Promise对象有两个特点:
1、对象的状态不受外界影响。Promise的状态有三种:pending(进行中)、fulfilled(已成功)、rejected(已失败)。
2、一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。
属性方法
Promise的属性方法包括
Promise.prototype.then() :为Promise实例添加状态改变时的回调函数。then方法的第一个参数是resolved状态的回调函数,第二个参数是rejected状态的回调函数(可选)。then方法返回一个新的Promise实例,因此可以链式的调用then方法。
Promise.prototype.catch() :指定发生错误时的回调函数。是.then(null, rejection)或.then(undefined, rejection)的别名。
Promise.prototype.finally() :用于指定不管Promise对象最后状态如何,都会执行的操作。该方法是ES2018引入的标准。
Promise.all() :用于将多个Promise实例,包装成一个新的Promise实例。新Promise实例的状态取决于传入的参数的Promise实例。当所有传入的Promise的实例状态都变为fulfilled,新Promise状态会变为fulfilled;如果传入的Promise的实例中有一个被rejected,则新Promise状态会变为rejected。
Promise.race() :同样是将多个Promise实例,包装成一个新的Promise实例。与.all()方法不同的是,只要传入的Promise实例中有一个状态发生了改变,则新Promise实例的状态就跟着改变。
Promise.resolve() :将现有对象转为Promise对象。
Promise.reject() :返回一个新的Promise实例,该实例的状态为rejected。
使用示例
const promise = new Promise(function(resolve, reject) {
// ...some code
if(/* 异步操作成功 */) {
resolve(vale);
} else {
reject(error);
}
});
promise.then(function(value){
// success
}, function(error){
// failure
});