从 ES6 开始,Javascript 已经宣布支持异步编程的多种方式。异步编程是一个大型的话题,在很多情况下我们需要确保代码中的异步处理是健壮、可靠且貌似性能,以致于用户体验可以保持在一个优秀级别,而错误处理则是这个过程中不可避免的一部分。
ES6 支持并行的任务和副作用之类的好玩功能。
Promise 概述
Promise 是 ES6 中广泛使用的异步编程范例。Promise 可以将异步代码(比如 AJAX 调用)转换为更加清晰、更加可读的格式,并且在 side-effects(副作用)处理方面提供更好的控制。
简单来说,Promise 是一个半成品的异步事件。具体来说,这就是您应该使用它们的方式:封装一个异步事件,Promise 对象提供了类似于数组、字符串和函数等常见类型的常见异步处理方法:then,catch 和 finally。
- Promise.then
Promise.then() 函数用于定义在 Promise 对象的 success (成功)执行中要运行的代码。它与 ES7 的 async/await 联系紧密,后者后者允许您更好地表达基于 promise 的异步逻辑。
下面是一个简单的例子,说明了通过 Promise.then 处理 AJAX 请求的方式。这里的 AJAX 请求可以很容易地替换成任何异步 API:
------------------------------------- --------- -- ----------- ---------- -- ------------------
假设上述请求成功,它将把响应写入 console.log()
- Promise.catch
Promise.catch的基本功能与 .then() 方法相同,但引发任何错误。
这是一个简单例子,它说明了如何在未处理任何 JavaScript 捕获语句的情况下执行一个无效的 AJAX 请求,并使用 catch 处理错误:
------------------------------------- --------- -- ----------- ---------- -- ------------------ ---------- -- -----------------
在此情况下,catch 将执行并打印错误,而不是停止代码执行或将错误留给用户。
- Promise.finally
Promise.finally 在 Promise 对象成功或错误处理之后,给我们提供了一个出口点,允许我们以相同的方式处理副作用和清理任务。
finally() 的一个典型用例是关闭一个网络请求,只要 Promise 执行,不论是成功还是错误:
------------------------------------- --------- -- ----------- ---------- -- ------------------ ---------- -- ----------------- ----------- -- -------------------- -----------
在这种情况下,我们将输出数据,即使如果发生错误。这也允许我们将在条件语句中使用这种模式。
除了这三个方法,Promise 也支持一些其他有用的功能,如 Promise.all(), Promise.allSettled() 和 Promise.race()。
处理 Promise 错误
Promise 是具有许多有用功能的强大范例,但它还需要一些实践和预判处理错误的方式:
处理所有可能的错误情况。确保您的代码已经针对所有异常情况编写,例如未经身份认证的 API 呼叫和超时。
在 Promise.catch 时,一定要给用户足够的反馈。没有错误信息会让用户陷入困境,并使他们不知所措。
捕捉任何 JavaScript 功能。不论是语法错误还是不符合业务逻辑的结果,总是要在 Promise 处理过程中处理错误信息。
在下面的代码示例中,我们将在使用 Promise.then 处理 AJAX 请求时故意引发一个错误,以便将其提供给 catch。错误处理后,我们使用 catch 打印错误。在这个情况下,我们已经宣布超时,并打印它到屏幕上,让用户知道请求未成功。
------------------------------------- --------- -- ----------- ---------- -- ------------------ ---------- -- - ---------------- ------------------ --- -------- -- ------- ----- --------- --
结论
深入了解 ES6 异步编程和解决方案仅仅是后端或前端开发的一部分。任何人都可以使用 Promise、Generator、async/await 这些工具来更好地控制异步流并修复其错误,从而使代码更容易阅读、更健壮、更易于维护,同时提高了用户的体验。
在几乎任何在线应用程序中,异步流将成为您最繁忙的功能之一,所以始终确保它们正确处理,是为您的应用程序增值的好教训。
在您的应用程序中使用正确的技术和实践,将为您提供可靠的编程策略和最佳性能方案,使您的用户接受体验更好,并使您的应用程序易于维护和管理。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6731af4d0bc820c58239d0fc