async
async
是一个前缀,用于函数声明,表示该函数是异步的。async
函数会隐式地返回一个Promise
。即使你没有在async
函数中显式地返回一个Promise
,JavaScript 也会自动将函数的返回值包装在一个Promise
中。- 如果
async
函数中抛出一个异常,这个异常会被Promise
捕获,并且Promise
会被拒绝(reject)这个异常。
await
await
只能在async
函数内部使用。await
用于等待一个Promise
完成,并返回其解决(resolve)的结果。- 如果
await
等待的Promise
被拒绝(reject),那么await
会抛出一个异常,这个异常可以被try...catch
语句捕获。 - 使用
await
会暂停async
函数的执行,直到Promise
解决(resolve)或拒绝(reject),然后继续执行async
函数并返回解决的值。
示例
假设我们有一个异步函数 fetchData
,它返回一个 Promise
,该 Promise
在一段时间后解决(resolve)一个数据。
在这个示例中,asyncFunction
是一个 async
函数,它使用 await
等待 fetchData
返回的 Promise
解决,并在解决后打印结果。如果 fetchData
抛出了异常(在这个例子中并没有),catch
块会捕获并处理这个异常。
注意事项
await
只能用在async
函数内部。await
会暂停async
函数的执行,但不会阻塞整个 JavaScript 引擎。其他任务(如事件处理、动画等)仍然可以执行。- 使用
await
可以避免回调地狱(callback hell),使代码更加清晰和易于维护。 await
后面通常跟一个返回Promise
的函数调用,但它也可以是任何返回Promise
的表达式。