Promise,就是一个对象,用来传递异步操作的信息。
1、Promise对象有两个特点:
一是对象的状态不受外界影响,有3种状态:Pending(进行中)、Resolved(已完成,又称Fulfilled)和Rejectd(已失败)。只有异步操作的结果可以决定当前是哪一种状态,任何其他操作都无法改变这个状态;
二是一旦状态改变(从Pending变为Rsolved和从Pending变为Rejected),任何时候添加回调函数都会立即得到这个结果。
三是一旦新建它就会立即执行,无法中途取消。
ES6规定,Promise对象是一个构造函数,用来生成Promise实例,它接受一个函数作为参数,该函数的参数分别是resolve和reject。
resolve的作用是将promise对象的状态从“未完成”变成“完成”;
reject函数是将promise对象的状态从“未完成”变成“失败”。
2、Promise.prototype.then()
then方法是定义在原型对象Promise.prototype上的,他的作用是为Promise实例添加状态 改变是的回调函数。
then方法的第一个参数是Resolved状态的回调函数,第二个参数(可选)是Rejected状态的回调函数。
如:
getJSON("/post/1.json").then(
post => getJSON(post.commentURL)
).then(
comments => console.log("Resolved: ",comments),
err => console.log("Rejected: ",err)
);
3、Promise.prototype.catch()
此方法是.then(null,rejection)的别名,用于指定错误发生时的回调函数。
一般来说,不要在then方法中(即then的第二个参数)定义Rejected状态的回调函数,而应总是使用catch方法。如:
promise
.then(function(data){
//success
})
.catch(function(err){
//error
});
4、Promise.all()
此方法用于将多个Promise实例包装成一个新的promise实例。
var p = Promise.all([p1,p2,p3]);
此方法接收一个数组作为参数。
5、Promise.race()
也是将多个Promise实例包装成一个新的promise实例。
6、Promise.resolve()
将现有对象转换为Promise对象
7、Promise.reject()
Promise.reject(reason)方法返回一个状态为Rejected的新Promise实例。