async和await
async和await的出现
async和await出现是在es6中,为了去简化promise的写法的。使用promise结合生成器简化promise的写法
- async关键字:简化创建promise的
- await关键字:等待,相当于then方法
await关键字必须写在被async修饰的函数中
async
async 作为关键字放在一个函数前面表示函数是个异步函数,异步函数也就意味着该函数的执行不会阻塞后面代码的执行。写一个简单的async函数
async function test(){
return "hello world"
}
test().then((res)=>{
console.log(res)
})
console.log("我虽然在后面但是我先执行");
执行结果是
使用async修饰的函数 他返回的是一个promise对象,我们需要使用promise的方法调用,加载,并不会阻塞进程,但是因为他是异步的所有他等待同步执行完在去输出hello world
虽然我们的console.log在后面输出,但是在执行node代码的时候,他却是先输出的
await
而 await关键字必须写在被async修饰的函数中,但是他会阻塞进程,await是等待的意思,那么它等待什么呢,它后面跟着什么呢?其实它后面可以放任何表达式,不过我们更多的是放一个返回promise 对象的表达式。注意await 关键字只能放到async 函数里面
这是个简单的关于异步等待的一个函数
async function async1(){
console.log('async1 start')
await async2()
console.log('async1 end')
}
async function async2(){
console.log('async2')
await async3()
console.log("async2 end")
}
async function async3(){
console.log('async3')
}
async1();
在我们的async执行的时候,async2阻塞队列需要等待async2里面的东西执行完,在执行async1的输出
综上所述:async和await都是函数关键字修饰词,都会将他们修饰的函数变成异步的函数,但有一点的不同,就是await关键字必须卸载async修饰的函数里面并且会阻塞队列