async是在声明一个异步函数,而await是在等待一个异步方法的执行
async函数
这个函数总是返回一个promise,如果代码中有return <非promise>语句,JavaScript会自动把返回的这个value值包装成promise的resolved值。
async function foo(){return 1}console.log(foo())
await
关键词await可以让JavaScript进行等待,直到一个promise执行并返回它的结果,JavaScript才会继续往下执行。
async function f() {let promise = new Promise((resolve, reject) => {setTimeout(() => resolve('done!'), 1000)})let result = await promise // 直到promise返回一个resolve值(*)alert(result) // 'done!'}f()
async函数处理异常
通过catch来捕获异常
async function foo(){throw new Error('fail')}foo().catch(err=>{console.log(err)})
在async函数内部使用try-catch来处理异常和错误
async function foo(){try{await new Promise((res,rej)=>{rej('fail')})}catch(err){console.log(err)}}foo()
class和await结合
class类中有then函数会被包装成promise函数
class User{then(res,rej){res('success)}}async function foo(){let a = await new User()return a}foo().then(v=>console.log(v))
async函数并行执行
利用Promise.all来实现
async function foo(){let h1 = new Promise((res,rej)=>{setTimeout(()=>res('h1'),2000)})let h2 = new Promise((res,rej)=>{setTimeout(()=>res('h2'),2000)})let result = await Promise.all(h1,h2)}foo()
