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
});