async和await

对async和awiat的理解

async 是“异步”的简写,而 await 可以认为是 async wait 的简写。
所以应该很好理解, async 用于申明一个 function 是异步的
而 await 用于等待一个异步方法执行完成。

async的作用

这个问题的关键在于,async 函数是怎么处理它的返回值的!

  • async 函数返回的是一个 Promise 对象
  • 如果在函数中 return 一个直接量,async 会把这个直接量通过 Promise.resolve() 封装成 Promise 对象。
  • 所以在没有 await 的情况下执行 async 函数,它会立即执行,返回一个 Promise 对象,并且,绝不会阻塞后面的语句。这和普通返回 Promise 对象的函数并无二致了。

然后就联系到了await

关于awiat

  • 一般来说,都认为 await 是在等待一个 async 函数完成。它的计算结果是 Promise 对象或者其它值
  • 因为 async 函数返回一个 Promise 对象,所以 await 可以用于等待一个 async 函数的返回值 这也可以说是 await 在等 async 函数
  • 如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。
  • 如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。

async和awiat帮我们干了啥??

通过下面两端代码我们就会发现结果相同的两段代码用promise和async、await的区别非常明显,看起来跟同步代码一样条例很清晰

function doIt() {
    console.time("doIt");
    const time1 = 300;
    step1(time1)
        .then(time2 => step2(time2))
        .then(time3 => step3(time3))
        .then(result => {
            console.log(`result is ${result}`);
            console.timeEnd("doIt");
        });
}
 
doIt();
 
// step1 with 300
// step2 with 500
// step3 with 700
// result is 900
// doIt: 1507.251ms
async function doIt() {
    console.time("doIt");
    const time1 = 300;
    const time2 = await step1(time1);
    const time3 = await step2(time2);
    const result = await step3(time3);
    console.log(`result is ${result}`);
    console.timeEnd("doIt");
}
 
doIt();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值