在编写异步代码时,错误处理是一个非常重要的问题。传统的回调函数并不十分优雅,而 Promise 提供了一种大大改进了此问题的方式。然而,当我们使用 async/await 时,错误处理仍然是必须认真考虑的问题。ECMAScript 2019 中引入了一个新的语法——try...catch
,这可以更进一步改进我们的错误处理方法。
async/await 的错误处理方式
当我们使用 async/await 处理异步代码时,我们通常需要一个 try-catch 的块来处理错误。这个块内部的代码可以引发错误,我们可以通过 try-catch 来处理这些错误。
基本用法
下面的代码片段展示了一个 async 函数,该函数使用 try-catch 异步处理请求响应:
-- -------------------- ---- ------- ----- -------- --------- - --- - ----- -------- - ----- ------------------------------- ----- ---- - ----- ---------------- -- --------------- - ----- -------------- --------- - ---- - ----------------- ------------ ------------- - - ----- ------- - --------------------- ------------------- - -
在上面的代码中,我们首先通过调用 fetch 方法来发送请求。然后我们解析及存储响应中的数据,检查是否成功,否则我们可以通过 thrown 一个错误来处理。
由于 fetch 和 response.json 都是异步函数,我们使用 await 关键字来等待它们返回。如果有任何错误,try-catch 语句将捕获和处理它们。
错误处理方式的不同
在使用 promise 时,如果有错误,我们可以使用 catch 来处理错误,但是 async/await 的错误处理方式却不完全一样。相比之下,try-catch 更加优雅和完美,因为我们可以更容易地理解代码中的错误处理方式,并获得更详细的错误信息。
同时处理多个异步操作的错误
在我们的 async 函数中,我们可能需要执行多个异步操作,这时候,我们同样需要考虑异步错误的处理方式。
下面的代码片段演示了异步执行多个函数并一起处理他们的错误方式:
-- -------------------- ---- ------- ----- -------- ------------------ - --- - ----- ----------- ---------- ---------- - ----- ------------- -------------------------------- -------------------------------- -------------------------------- --- ----- ------- ------ ------ - ----- ------------- ----------------- ----------------- ----------------- --- ---------------- -------- -------- ---------------- - ----- ------- - --------------------- ------------------- - -
在上述代码片段中,我们首先使用前面的例子一样的方式处理每个异步请求并检查他们的响应结果。然后,我们使用 Promise.all 一起处理这些请求,必须等待所有响应结束。
在 Promise.all 处理中,如果有任何一个请求失败,我们只需要在 catch 块中捕获即可,这显然更加简单和优雅。
ECMAScript 2019 中的新增特性:try...catch
随着 ECMAScript 2019 的发布,JavaScript 语言中引入了一些重要的语言特性,其中一个新特性是 try...catch
。
通过此特性,我们可以优雅地处理异步函数中的异常和错误。
下面的代码片段,是一个 async/await 函数的完整例子,通过 try-catch 来处理异常:
async function asyncFunction() { try { const result = await performAsyncTask(); console.log('Result: ', result); } catch (error) { console.error(`Error: ${error.message}`); } }
如上所示,我们定义了一个 async 函数,并在其中使用 performAsyncTask 方法。performAsyncTask 的执行结果可能会导致异常,所以我们使用 try-catch 块来捕获它们。
在 catch 块中,我们可以使用 console.error 方法来记录一个错误。
总结
在本文中,我们了解了 async/await 的错误处理方式,并且使用 try-catch 来处理异步执行过程中的错误,通过这种方式可以更好的优雅而完美的处理异步代码中的错误。
我们也学会了如何同时处理多个异步操作的错误。
因此,我们在编写异步代码时,应该尽可能地使用 try-catch 块,这样可以更好的处理和 debug 异步代码中的错误,和更好地帮助我们迅速地解决问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64afceb048841e9894bf8380