async 与 await,同步与异步

async用来标识一个函数式异步函数,是将期约(promise)应用于js函数的结果,异步函数可以暂停执行而不阻塞主线程。异步函数返回一个promise对象(如果是使用return返回了值会被promise.reslove()包装成一个promise对象,没return返回undefined)。调用时该函数不会阻塞主流程。

async函数中,await关键字可以暂停异步代码的执行,等待期约解决,即await右侧的表达式执行完成,执行的时候会让出JS运行时的执行线程,阻塞async函数内的后续的代码,等同步任务执行完毕才会执行。

javascript运行时在遇到await关键字时,会记录在哪里暂停, 等await后的值可用了,js  运行时会向消息队列中推送一个任务(即使右侧是个常量值) ,这个任务会恢复异步函数的执行。 

注意事项:

1、await必须在异步函数中async中使用

2、await后的promise对象的运行结果可能是rejected,此时不会执行await后的代码,所以需要把await放在try/catch中捕获异常

3、多个await如果不存在继发关系,最好同时触发(promise.all),减少耗时

同步与异步的区别:

同步函数:函数被调用后不会立即返回,需要该函数的事情全部完成后才会返回并执行后续操作

异步函数:函数被调用后会立即返回,返回后调用者可以继续执行其他行为,同时会启用异步线程执行异步函数内容

回调函数:回调函数就是在调用某个函数时,将自己的一个函数的地址(回调函数代码块地址)作为参数传给那个函数,而那个函数在需要的时候利用参数中的回调地址调用回调函数。

try/catch与promise.catch()的差异:

try/catch用于捕获同步任务产生的异常

promise.catch()用于捕获异步任务产生的异常

async声明的异步函数中,针对await声明的同步代码块可以用try/catch捕获异常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值