第一来看一段前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function one() {
return "1"
}
function two() {
return "2"
}
function three() {
return "3"
}
function four() {
return "4"
}
function run() {
console.log(one())
console.log(two())
console.log(three())
}
run()
</script>
</body>
</html>
很明显,我们可以打开浏览器控制台,查看输出结果

输出结果
run()方法中的函数依次执行。
接下来我们做一些改变,将two()添加异步操作,将two()改为下面代码。
function two() {
setTimeout(()=>{
return "2"
},3000)
}
它的作用是:等待3秒,然后返回2
我们此时再打开控制台看一看结果是什么?

输出结果
我们发现原本应该是2的位置居然变成了underfined!!
我们来分析一下:函数two()模拟了一个异步操作,但是当执行函数console.log(two())的时候,实际上会立刻执行并不会等待3秒,因此此时的two()自然没有任何返回值。
我们此时可能有些疑惑,为什么要让程序进行异步操作呢?直接让他从上到下执行下去不就好了吗?
实则不是这样的,前端向后端请求数据到就接受数据这个过程是需要时间的,如果不进行处理的话,那么结果就是underfined 与我们预期不同。
async 是 JavaScript 中用于处理异步操作的关键字,一般与 await 结合使用。它的作用是使函数变为异步函数,以便在其中执行异步操作而不阻塞程序的执行。async 函数返回一个 Promise 对象,该 Promise 将在函数的异步操作完成后解决(resolve)为函数的返回值,或者在出现错误时拒绝(reject)。
接下里我们尝试使用async与await来更改之前的程序,看看它有什么作用
async function two() {
setTimeout(()=>{
return "2"
},3000)
}

输出结果
这时我们发现原本应该是undefind的地方被替换成了一个Promise对象.我们知道了它的作用,但这并不是我们想要的结果。
我们想要的结果是one()函数执行,然后等待3秒two()执行,最后three()执行。
因此我们再看一看async与await的作用,再更改一下代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function one() {
return "1"
}
async function two() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("2")
}, 3000)
})
}
function three() {
return "3"
}
function four() {
return "4"
}
async function run() {
console.log(one())
console.log(await two())
console.log(three())
}
run()
</script>
</body>
</html>
当 async function 执行到 await 语句时,会等待这个 Promise resolve,然后将 resolve 参数作为 await 语句的返回值。

输出结果
输出结果:会先打印出1 ,然后等待三秒打印出2,3
接下来为了进一步了解async 与await的作用,我们再run()方法后再次调用依次one()

我们发现控制台第一打印出 ‘1’,‘1’,然后等待三秒后打印‘2’ ,‘3’.
这个时候我们可以了解两个async与await的作用了:如果执行到async修饰的函数,里面包含了异步操作,那么程序不会等待而是继续向下执行,async修饰的函数内部会依次执行,await修饰方法后面的方法会等待await执行完毕后才执行。
收藏了,感谢分享