关于Promise的笔记

1、Promise是es6的新特性,属于异步编程的一种解决方法。例如,可以在异步的情况下解决层层回调这种问题。
Promise对象的原型都自带all,catch和then这些方法。

2、Promise的构造函数所需的参数为一个函数,这个函数自带两个参数resolve和reject,用于对应接下来函数执行的成功和失败两种状态。

function getNumber(){
    var p = new Promise(function(resolve, reject){
        //做一些异步操作
        setTimeout(function(){
            var num = Math.ceil(Math.random()*10); //生成1-10的随机数
            if(num<=5){
                resolve(num);
            }
            else{
                reject('数字太大了');
            }
        }, 2000);
    });
    return p;            
}

getNumber()

3、then()为Promise对象接下来执行的方法,可以接受两个代表resolve和reject状态的两个函数作为参数。需要注意的是,如果then中已经接受了reject参数,则之后catch中的代码无法执行
例如在以下例子中,若then接收到的状态为resolved,则跳入第一个函数,反之则第二个。

getNumber()
.then(
    function(data){
        console.log('resolved');
        console.log(data);
    }, 
    function(reason, data){
        console.log('rejected');
        console.log(reason);
    }
);

在以下代码中,catch中的代码无法被执行

getNumber()
.then(
    function(data){
        console.log('resolved');
        console.log(data);
    }, 
    function(reason, data){
        console.log('rejected');
        console.log(reason);
    }
)
.catch(function(reason){
    console.log("catch:"+reason);
})

4、catch()中可以用于接受reject参数,或者接受来自resolve中的报错信息(类似try/catch)
someData未被定义,执行到这一句后立刻跳入catch中(异步报错)

getNumber()
.then(
    function(data){
        console.log('resolved');
        console.log(someData);
        console.log(data);    
    }, 

)
.catch(function(reason){
    console.log("catch:"+reason);
})

5、all与race:
共同点:关于多个promise对象的并行执行
不同点:结束标准不一样,all得执行完全部对象才会结束,race则会在第一个程序结束后立马结束

用法:
有三个promise

function runAsync1(){
    var p = new Promise(function(resolve, reject){
        //做一些异步操作
        setTimeout(function(){
            console.log('异步任务1执行完成');
            resolve('随便什么数据1');
        }, 1000);
    });
    return p;            
}
function runAsync2(){
    var p = new Promise(function(resolve, reject){
        //做一些异步操作
        setTimeout(function(){
            console.log('异步任务2执行完成');
            resolve('随便什么数据2');
        }, 500);
    });
    return p;            
}
function runAsync3(){
    var p = new Promise(function(resolve, reject){
        //做一些异步操作
        setTimeout(function(){
            console.log('异步任务3执行完成');
            resolve('随便什么数据3');
        }, 2000);
    });
    return p;            
}

all:

Promise.all([runAsync1(),runAsync2(),runAsync3()])
.then(function(results){
    console.log(results)
})

执行结果:在这里插入图片描述
race:

Promise.race([runAsync1(),runAsync2(),runAsync3()])
.then(function(results){
    console.log(results)
})

结果:在这里插入图片描述

race方法可以用于限制某个方法的超时操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值