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()