blog icon indicating copy to clipboard operation
blog copied to clipboard

异步操作对象Promise

Open pb-cheung opened this issue 8 years ago • 0 comments

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构造函数接受一个函数作为参数,该函数的两个参数分别是resolvereject。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) => {
            //成功回调
       },
        () => {
            //失败回调
         }
);

pb-cheung avatar Dec 18 '16 13:12 pb-cheung