async/await可以用同步的方式写异步代码,没有回调函数或Promise链,可以在for循环和if语句中使用。
async关键字表示一个函数是异步函数。以下示例中,test()是异步函数。
async函数的特殊之处在于,可以在函数中使用await关键字,如果await一个Promise,会暂停执行该函数,直到Promise变为fulfilled或rejected。await还会解开Promise的包装,取得Promise变为fulfilled的值。
在以上示例中,Promise.resolve()函数代表这个Promise会立刻变为fulfilled。在以下示例中,await暂停了test()函数100毫秒:
await是JavaScript的一个普通的关键字,可以在if语句、for循环和try/catch中使用。
async函数的另一个特殊之处在于,它总是返回一个Promise。即使在async函数中返回的是一个原始类型的值,JavaScript会将它包装为Promise。
async/await的错误处理是一个复杂的话题。但是,大体上有两种错误处理的模式。
在await一个Promise时,Promise变为rejected,await会抛出一个错误,可以用try/catch捕获:
也可以用Promise#catch()函数解包Promise的错误: