es6基础回顾--Promise

从我理解来说,Promise解决回调地狱,不会在ajax里面无休止的调用ajax了。
Promise是一个对象,从其中可以获取异步操作的消息。
Promise对象的状态不受外界影响,其代表一个异步操作,有三种状态:Pending(进行中),Resolved(已完成),Rejected(已失败)。一旦状态改变就不会再变。

生成Promise实例对象基本用法:

    var promise = new Promise(function(resolve,reject){
        if(/*异步操作成功*/){  //比如ajax操作
            resolve(value)
        }else{
            reject(error)
        }
    })

resolve函数的作用是将Promise对象的状态从Pending变为Resolved,在异步操作成功时调用,并将异步操作的结果作为参数传递出去。
reject函数的作用是将Promise对象的状态从Pending变为Rejected,在异步操作失败时调用,并将异步操作的报错作为参数传递出去。

Promise实例生成后就可以用then方法,接受两个参数,分别指定Resolved状态和Reject状态的回调函数。第二个函数可选。

    function test() {
        return new Promise((resolve,reject)=>{
            $.ajax({
                url:xxx,
                context:xxx,
                success:function(value){
                    resolve(value) //成功时用resolve
                },
                error:function(mes){
                    reject(mes)   //失败时用reject
                }
            })
        })
    }

    test.then((value)=>{
        console.log(value); //接受resolve返回的数据
    },(mes)=>{
        console.log(mes);  //接受reject返回的数据
    })

Promise.prototype.then()

then方法返回的是一个新的Promise实例。因此可以采用链式写法,then方法后再调用另一个then方法。

    test.then(()=>{
        return xxx; 
    }).then(()=>{
        //...   
    })

Promise.prototype.catch()

catch方法是then(null,rejection)的别名,用于指定发生错误时的回调函数。

test.then(()={
    //...   
}).catch(function(){
    //处理 getJSON 和 前一个回调函数运行时发生的错误  
})

如果异步操作抛出错误,状态会变为Rejected,会调用catch方法指定的回调函数处理这个错误。catch返回的还是一个Promise对象,后面还可以接着调用then方法。

Promise.all()

用于将多个Promise实例包装成一个新的Promise实例。

var p = Promise.all([p1,p2,p3]);

只有p1,p2,p3的状态都变成fulfilled,p的状态才会变成fulfilled。此时p1,p2,p3的返回值组成一个数组,传递给p的回调函数。

只要p1,p2,p3中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值会传递给p的回调函数。

Promise.race()

同样也是讲多个Promise实例包装成一个新的Promise实例。

var p = Promise.race([p1,p2,p3]);

只要p1,p2,p3中有一个实例率先改变状态,p的状态就跟着改变。率先改变的Promise实例的返回值传递给p的回调函数。

Promise.resolve()

将现有对象转换成Promise对象。

var jsPromise = Promise.resolve($.ajax('/whatever.json'));

Promise.reject()

Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected

var p = Promise.reject('出错了');
// 等同于
var p = new Promise((resolve, reject) => reject('出错了'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值