ES6之promise基础内容

promise是es6中增加的新内容

它就是一个对象,主要用来处理异步数据的

为了我们的代码更加具有可读性和可维护性,我们需要将数据请求与数据处理明确的区分开来,这时候,就显示出了promise的重要。

在promise中,有三种状态

                ——》resolve(完成)

pending (等待,处理中) ———

                ——》rejected(失败,拒绝)

状态只能从pending 到 resolve 或者 pending 到rejected 并且不可逆

用法:

var pro = new Promise(function(resolve,reject){

  resolve("成功");     // 成功,就传递数据 “成功”出去

  reject("失败");  // 失败,就传递数据“失败”出去

})

pro.then(function(val){},function(err){})

第一个是成功的回调函数,val接收resolve()中的数据

第二个是失败的回调函数,err接收reject()中的数据

then()方法执行完成之后又返回的是一个promise对象,所以可以继续在后面接 .then()方法,并且可以使用链式结构的写法。比如:

pro.then(function(val){},function(err){}).then(function(val){},function(err){})

catch   捕获的用法

用来制定reject的回调,并且发生错误可以继续执行代码不使代码停在错误的地方。

用法如下:

var p = new Promise(function(resolve,reject){
    resolve("success");
})
p.then(function(data){
    console.log(data);  //success
    throw "发生错误了"
}).catch(function(err){
    console.log(err);  //发生错误了
})

all 的用法

只有当所有的promise全部成功才能走成功,否则失败

用法如下:

        var p1 = Promise.resolve(10);
        var p2 = Promise.resolve(20);
        var p3 = Promise.reject(30);

        Promise.all([p1,p2,p3,true,false]).then(function(data){
            console.log(data);  
        },function(err){
            console.log(err);  //30
        })

如果没有错误:

        var p1 = Promise.resolve(10);
        var p2 = Promise.resolve(20);

        Promise.all([p1,p2,true,false]).then(function(data){
            console.log(data); //[10,20,true,false]
        },function(err){
            console.log(err);
        })

race 用法

race也是返回一个promise对象

作用是获取最先得到的结果

        var p1 = new Promise(function(resolve,reject){
            setTimeout(resolve,100,"first");
        })
        var p2 = new Promise(function(resolve,reject){
            setTimeout(resolve,50,"second");
        })


        Promise.race([p1,p2]).then(function(val){ 
            console.log(val)  //second
        })    

成功的promise里面可以传递一个成功的promise对象

        var p1 = Promise.resolve(10);

        var p2 = Promise.resolve(p1); 

        p2.then(function(data){
            console.log(data); // 10
        })
原文地址:https://www.cnblogs.com/ddjps/p/10512902.html