async
- 首先async内部实现原理就是Promise
- 将返回一个Promise对象,所以获取async的返回值需使用.then方法
- 当async内部抛出异常状态, Promise 对象变为reject状态,使用catch 方法进行捕获
async函数在执行过程中,后续代码也开始执行。
async function notnow(){
return "我执行时,后续代码已经开始运行"
}
notnow().then(res => {console.log(res)}) //then获得resolved结果
console.log("我比上边先跑")
async function notnow(a){
if(a){
return "我是resolved的结果"
}else{
throw "我是异常的结果,不使用catch会报错"
}
}
notnow(false).catch(err => {console.log(err)})
await
- await 只能放到async 函数里。
- 表示紧跟在后面的表达式需要等待结果才能运行。
下面看一段代码
function justwait2s(a){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(a*2)
},2000)
})
}
async function test(){
let answer = await justwait2s(2);
console.log(answer);
console.log("我是不是先跑呢?")
}
test();
两秒后输出
//4
//我是不是先跑呢
对比上面的情况,遇到await 之后,代码就暂停执行了, 等待await执行完毕后,后续代码才会执行