blog
blog copied to clipboard
异步操作对象Promise
1.Promise介绍
Promise是ES6中新添加的异步编程方案,内置对象。 其
优点
是,有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数
。此外,Promise对象提供了统一的接口,使得异步操作更加容易。
所谓Promise,就是承诺的意思,代表了未来某个将要发生的时间。想起了《权力的游戏》中的Ned Stark的“I promise.”,Sansa Stark的“father always promise. ”
状态
(a)Promise对象有三个状态。
Pending
(等待的,未决的,进行中),Resolved
(已解决的,已完成的)、Rejected
(拒绝的,已失败)。
(b)状态转变。
状态转变只有以下两种情况。
Pending --> Resolved
Pending --> Rejected
2.用法
ES6中Promise对象是一个构造函数
,用来生成Promise实例。
Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve
和reject
。resolve和reject实际上也是两个函数,它们由JavaScript提供,用于Promise对象的状态的扭转。
resolve函数
作用是将Promise对象的状态从“Pending”变为“Resolved”。在异步操作成功时调用,并将异步操作的结果作为参数传递出去。
reject函数
作用是将Promise对象的状态从“Pending”变为“Rejected”。在异步操作失败时调用。
then方法
调用以上两个函数只是扭转了状态,跟踪获取到异步的状态后要做的事情还需要自定义函数来实现。Promise的实例上有个then
方法,用来指定Resolved状态和Reject状态的回调函数。
例子:
function getData(params){
return new Promise((resolve, reject) => {
$.ajax({
data: params,
url:"http://example.com/data",
success: function(json){
//...
resolve(json);
},
error: function(){
rejected();
}
})
});
};
//调用异步函数
getData(params).
then(
(json) => {
//成功回调
},
() => {
//失败回调
}
);