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: await 后面必须跟一个promise对象, 而async 函数返回的是一个promise对象