理解JavaScript中async/await
原文:Understanding Async/Await in JavaScript
async/await可以用同步的方式写异步代码,没有回调函数或Promise链,可以在for
循环和if
语句中使用。
async/await可以用同步的方式写异步代码,在异步函数中,可以用if语句、for循环和try/catch。
async
async
关键字表示一个函数是异步函数。以下示例中,test()
是异步函数。
1 | async function test() { |
也可以定义一个异步的箭头函数:
1 | const test = async () => 42; |
await
async函数的特殊之处在于,可以在函数中使用await
关键字,如果await
一个Promise,会暂停执行该函数,直到Promise变为fulfilled或rejected。await
还会解开Promise的包装,取得Promise变为fulfilled的值。
1 | async function test() { |
在以上示例中,Promise.resolve()
函数代表这个Promise会立刻变为fulfilled。在以下示例中,await
暂停了test()
函数100毫秒:
1 | async function test() { |
await
是JavaScript的一个普通的关键字,可以在if
语句、for
循环和try/catch
中使用。
1 | async function asyncEvenNumbers() { |
返回值
async函数的另一个特殊之处在于,它总是返回一个Promise。即使在async函数中返回的是一个原始类型的值,JavaScript会将它包装为Promise。
1 | async function test() { |
也就是说,可以对async函数使用await
:
1 | async function test() { |
错误处理
async/await的错误处理是一个复杂的话题。但是,大体上有两种错误处理的模式。
在await
一个Promise时,Promise变为rejected,await
会抛出一个错误,可以用try/catch
捕获:
1 | async function test() { |
也可以用Promise#catch()
函数解包Promise的错误:
1 | async function test() { |
async/await是JavaScript中并发的未来趋势。“Mastering Async/Await”教你如何在几个小时内,用async/await构建前后端APP,来看看吧!