在 ES9 中,引入了一项新的语言特性——异步函数。异步函数是一种支持使用 await
关键字等待异步操作返回结果的函数。它使得我们可以更加方便地处理异步操作,避免了回调地狱的问题。
异步函数的定义
异步函数是使用 async
关键字定义的函数,该函数内部可以使用 await
关键字等待异步操作的结果。例如:
----- -------- ----- - ----- ------ - ----- ------ -------------------- -
其中,bar
函数是一个异步函数,foo
函数等待 bar
函数返回结果后,输出结果到控制台。
异步函数的返回值
异步函数的返回值是一个 Promise 对象。如果异步函数内部没有显式地返回值,则返回一个 undefined
的 Promise 对象。如果异步函数内部返回了一个非 Promise 对象或者抛出了一个异常,则会将其转换为一个拒绝(Rejected)状态的 Promise 对象。
异步函数的执行顺序
在调用异步函数时,它会立刻返回一个 Promise 对象,并开始执行异步操作。在异步操作完成时,Promise 对象会被解决(Resolved)并返回一个值。如果异步操作失败,则 Promise 对象会被拒绝(Rejected)并返回一个错误。
异步函数内部的代码会按照普通函数的方式进行执行,直到遇到一个 await
关键字。遇到 await
关键字时,异步函数会暂停执行,并等待 await
右侧的表达式返回一个 Promise 对象。一旦 Promise 对象被解决,异步函数会恢复执行,并将解决的值作为 await
表达式的结果返回。如果 Promise 对象被拒绝,则会抛出一个错误并结束函数执行。
异步函数的错误处理
在异步函数内部,可以使用 try...catch
语句捕获异步操作的错误。例如:
----- -------- ----- - --- - ----- ------ - ----- ------ -------------------- - ----- ------- - --------------------- - -
如果 bar()
返回的 Promise 被拒绝,foo()
函数会捕获到错误,输出错误到控制台。
异步函数的示例
以下是一个使用异步函数进行异步操作的示例代码:
----- -------- ----------------- - --- - ----- -------- - ----- ------------------------------ ----- ---- - ----- ---------------- ------ ----- - ----- ------- - --------------------- - - -------------------------- -- - ------------------ ---
该代码会调用 fetchUser
函数获取指定 ID 的用户信息,并在获取成功后输出用户信息到控制台。如果获取失败,则会输出错误信息到控制台。
结论
异步函数是一种非常实用的语言特性,可以方便地处理异步操作,避免了回调地狱的问题。使用异步函数时需要注意其返回值、执行顺序和错误处理等方面的细节。熟练掌握异步函数会对前端开发非常有帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66fbb57a447136260160ee70