KOA2系列 --- async&await

什么是async和await

你要想理解语法,可以先从两个单词的基本意思来进行了解.
async是异步的简写,而await可以堪称async wait的简写。明白了两个单词,就很好理解了async是声明一个方法是异步的,await是等待异步方法完成。注意的是await必须在async方法中才可以使用:因为await访问本身就会造成程序停止堵塞,所以必须在异步方法中才可以使用。

async到底起什么作用?

async是让方法变成异步,这个很好理解,关键是他的返回值是什么?我们得到后如何处理?

根据以前的经验,我们希望用return直接返回async函数的值,但是如果真是这样,还有await什么作用,我们写段代码测试一下。

async function testAsync(){
    return 'Hello async';
}
const result = testAsync();
console.log(result);

在终端里用node执行这段代码,你会发现输出了Promise { ‘Hello async’ },这时候会发现它返回的是Promise。

PS E:\code\BXShop> node test.js
Promise { 'Hello async' }

await在等什么?

await一般在等待async方法执行完毕,但是其实await等待的只是一个表达式,这个表达式在官方文档里说的是Promise对象,可是它也可以接受普通值。我们写一段代码来验证一下这个结果。在程序中我们有用async的方法,也有普通的方法。最后在控制台输出时,你会发现都可以直接输出。

function getSomething(){
    return 'something';
}

async function testAsync(){
    return 'Hello async';
}

async function test(){
    const v1=await getSomething();
    const v2=await testAsync();
    console.log(v1,v2);
}

test();

举一个例子

function step1(){
    console.log("准备饭菜");
}
function step2(){
    console.log("准备餐具");
}
function step3(){
    console.log("收拾桌子");
}

app.use(async(ctx,next)=>{
    await step1(); //等待step1执行完毕
    console.log("我要开始做饭了");
    await next(); //等待所有的next执行完毕
    console.log("一切都做完了");
});

app.use(async(ctx,next)=>{
    await step2(); //等待step2执行完毕
    console.log("我要开始吃饭了");
    await next();
});

app.use(async(ctx)=>{
    await step3(); //等待step3执行完毕
    console.log("我要开始洗碗了");
});

输出结果

准备饭菜
我要开始做饭了
准备餐具
我要开始吃饭了
收拾桌子
我要开始洗碗了
一切都做完了

参考文章
技术胖的博客
廖雪峰的官方网站

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值