async function_理解async/await 和 promise 的执行顺序,宏任务和微任务的区别

对于async await的理解:

带 async 关键字的函数,它使得你的函数的返回值必定是 promise 对象。如果async关键字函数返回的不是promise,会自动用Promise.resolve()包装;如果async关键字函数显式地返回promise,那就以你返回的promise为准。

特点:async表示函数内部有异步操作,一般 await 关键字要在 async 关键字函数的内部,await 写在外面会报错。

对于 await 右侧表达式,如果不是 promise , await会阻塞后面的代码,先执行async外面的同步代码,同步代码执行完,再回到async内部,把这个非promise的东西,作为 await表达式的结果。

如果它等到的一个 promise 对象,await 也会暂停async后面的代码,先执行async外面的同步代码,等着 Promise 对象 fulfilled,然后把 resolve 的参数作为 await 表达式的运算结果。

看例子:

fe67bf102268fc9b23d7a58afc7aeeef.png

 async function async1() { console.log('async1 start') // async1 start 22 await async2(); console.log('async1 end') // async1 end 66 } async function async2() { console.log('async2'); //async2 33 } console.log('script start') //script start 11 setTimeout(function() { console.log('setTimeout'); //setTimeout 88 }, 0);  async1(); new Promise(function(resolve) { console.log('promise1'); // promise1 44 resolve(); }).then(function() { console.log("promise2") //promise2 77 });  console.log("script end"); // script end 55
ac28d0e3f7a19b98d7897c329c10af46.png

截图后面注释的数字代表打印出来的先后顺序,11代表第一,22代表第二。

除此之外还涉及到宏任务微任务。下次再聊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值