前言
在 JavaScript 中异步编程是不可避免的。Promise 是一个很好的异步编程方案。而使用 async/await 语法对 Promise 进行更好的封装,让代码看上去更加简洁易读。不过在实际项目中,我们往往需要对 Promise 的异步结果进行异常处理,以保证程序的健壮性。在这篇文章中,我将介绍如何在 Promise 中使用 async/await 语法,以优雅地处理异步异常。
Promise 异常处理
Promise 在原生支持异步处理的同时,也提供了丰富的异常处理函数和方法。其中最常见的异常处理方法有 .catch()
方法和 try-catch
语句。
.catch()
.catch()
方法为 Promise 提供最基本的异常处理能力。该方法会在 Promise 被 rejected 时被触发,可以通过链式调用来进行多个异常处理。代码示例如下:
fetch('https://jsonplaceholder.typicode.com/todos/1') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error));
try-catch
对于使用 async/await 语法的 Promise,也可以像普通的同步代码一样使用 try-catch
语句来处理异常。代码示例如下:
async function fetchData() { try { const response = await fetch('https://jsonplaceholder.typicode.com/todos/1'); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } }
async/await 异常处理
当使用 async/await 语法时,我们通常使用 try-catch
语句来处理异常。不过,在实际项目中,异常可能会因为 Promise 的 promiseRejectionEvent 而被抛出,会导致错误堆栈缺失,难以准确地追查异常原因。为此,我们需要对异常进行更加全面的处理,以保证程序的健壮性。
1. 使用 Promise.catch() 来处理异常
为了解决 async/await 中 Promise 异常被 promiseRejectionEvent 抛出的问题,我们可以使用 Promise.catch() 函数来对异常进行处理。这样可以在异常被抛出时,通过 promiseRejectionEvent 捕获到异常信息,也可以在 try-catch 捕获不到异常时,确保异常信息被正确地捕获和处理。
代码示例如下:
async function fetchData() { const response = await fetch('https://jsonplaceholder.typicode.com/todos/1'); const data = await response.json(); return data; } fetchData() .then((data) => console.log(data)) .catch((error) => { console.error(error); });
2. 使用自定义异常类来捕获异常
当捕获异常时,我们可以自定义异常类,并使用这个类来包装异常信息。这样可以提高代码的可维护性,并将错误处理逻辑从主要代码中分离出来。代码示例如下:
class CustomError extends Error { constructor(message) { super(message); this.name = 'CustomError'; } } async function fetchData() { const response = await fetch('https://jsonplaceholder.typicode.com/todos/1'); if (!response.ok) { throw new CustomError('Fetch data error.'); } const data = await response.json(); return data; } fetchData() .then((data) => console.log(data)) .catch((error) => { if (error instanceof CustomError) { console.error(error.message); } else { console.error(error); } });
总结
异步异常处理是 JavaScript 中一项重要的技能。在使用 Promise 和 async/await 语法时,我们可以通过 .catch()
方法和 try-catch
语句来处理异常。为了解决 async/await 中异常被 promiseRejectionEvent 抛出的问题,我们可以使用 Promise.catch() 函数来对异常进行处理。当然,我们也可以通过自定义异常类来捕获异常,并将错误处理逻辑从主要代码中分离出来。这些技巧将有助于提高代码的可维护性和健壮性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b5bc72add4f0e0ffe7bb57