async和await 是es7的特性,是从promise 里面延伸出来的新语法糖 他会将异步操作修改成同步操作,并且代码看起来更优雅
直接看例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script>
a()
async function a() {
await b()
console.log(111);
setTimeout(async () => {
console.log('aaaa');
}, 1000)
}
function b() {
console.log('b1');
return new Promise(resolve => {
setTimeout(function () {
console.log('bbbbb');
resolve();
}, 2000)
c();
})
}
function c() {
console.log('c1');
return new Promise(resolve => setTimeout(function () {
console.log('cccc');
}, 1000))
}
</script>
</html>
在多层函数嵌套的时候async await 只会等待最近一层的操作 如果需要每层等待就需要每一层都加上async和await,如上所见
还有Generator函数(需要手动触发(next()方法)才能执行)
ps: 看了一个老哥的测试两个的性能,高并发情况下async比回调更费性能, 一般情况下可以忽略不计 参考: https://blog.csdn.net/z591102/article/details/108215778
PS: await 后面必须跟一个promise对象, 而async 函数返回的是一个promise对象