async/await异步不阻塞调用

es6有两个新的异步语法,一个是async,await,一个是promise,两者我更青睐于async,await,原因很简单,async,await语法糖让代码更清晰,更直观。
简单的讲一下,async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。那其实就是说在async函数内,每当遇到await关键字的时候,函数就是阻塞住,必须等到异步操作有结果时才会往下继续执行,思考下,我们关心的异步返回的结果,那么也就是说我们可以异步函数执行的结果储存起来,在需要的时候再去await,看下面的代码

function asyncAfun() {
    return new Promise((resolove)=>{
        setTimeout(function() {
            resolove(123);
        }, 3000);
    })    
}
function asyncBfun() {
    return new Promise((resolove)=>{
        setTimeout(function() {
            resolove(456);
        }, 3000);
    })    
}
async function test () {
    let a = asyncAfun();//不阻塞
    let b = asyncBfun();//不阻塞
    let _a = await a; //这里等待a的返回 后面可以do something
    let _b = await b;//这里等待b的返回 后面可以do something
}

那么当你需要同时并发大量请求,并且等待所有的请求结果完成的时候可以这么写

async function test () {
    let a = asyncAfun();
    let b = asyncBfun();
    let _a = await a;
    let _b = await b;
    Promise.all([_a,_b]).then(v=>{
        console.log(v)
    })
}

Promise.all的作用可以去MDN查,类似的还有Promise.race

学以致用,以上

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值