promise

promise是es6 中专门用来处理异步回调的,可以解决回调地狱

Promise

1.理解为一个类,因此可以通过new 实例化对象;跟一个函数作为参数,函数中有两个参数;分别是

resolve reject

2. promise状态,三个状态

pending -- 进行中

\fulfilled -- 成功 调用resolve,会自动转化为成功状态

\rejected -- 失败 调用reject,会自动转化为失败状态

状态是不可逆的

3.Promise理解为在new出来的实例原型上有then catch两个方法

   

var p = new Promise(function(resolve, reject){
    //做一些异步操作
    setTimeout(function(){
        console.log('执行完成');
        resolve('随便什么数据');
    }, 2000);
});

\ then 有两个参数(函数),第一个参数接收成功和第二个参数失败的函数

  

​
 new Promise((resolve, reject)=>{
    //做一些异步操作
    setTimeout(function(){
        resolve('你好');
    }, 2000);
    
}).then((val)=>{   //   成功的then方法
     console.log(val) // 会输出一个 '你好'
})

​

\ catch 接收失败的函数

   

 new Promise((resolve, reject)=>{
    //做一些异步操作
    setTimeout(function(){
        resolve('你好');
    }, 2000);
    
}).then((val)=>{   //   成功的then方法
     console.log(val) // 会输出一个 '你好'
}) .catch((err)=>{
     console.log('a',error)  
//then方法回调错误后 自动出发 catch错误捕获  交给rejected响应函数处理
})

 4.Promise.all 接收多个promise,并且是成功状态的,输出的参数值是一个数组,数组的顺序和参数顺序一致

   function cutUp(){
        console.log('12');
        var p = new Promise(function(resolve, reject){        
            setTimeout(function(){
                console.log('11');
                resolve('21');
            }, 1000);
        });
        return p;
    }

   
    function boil(){
        console.log('ab');
        var p = new Promise(function(resolve, reject){      
            setTimeout(function(){
                console.log('aa!');
                resolve('ba');
            }, 1000);
        });
        return p;
    }

    Promise.all([cutUp(), boil()])
        .then((result) => {
            console.log('没有了');
            console.log(result);
        })

.Promise.race 接收多个promise,返回的是最快返回的

let p1 = new Promise(resolve => {
        setTimeout(() => {
            resolve(' p1 ')
        }, 1000)
    });
    let p2 = new Promise(resolve => {
        setTimeout(() => {
            resolve(' p2 ')
        }, 2000)
    });
    Promise.race([p1, p2])
        .then(value => {
            console.log(value)
        })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值