在 JavaScript 中,async 函数是一种方便的异步编程方式。它们可以让我们像编写同步代码一样编写异步代码,而不需要使用回调函数或者 Promise 链。ES9(也称为 ECMAScript 2018)引入了一些新的语法来更好地处理 async 函数中的错误。
async 函数简介
在介绍 ES9 中的新语法之前,我们先来回顾一下 async 函数的基本用法。async 函数是一个返回 Promise 对象的函数,它可以使用 await 关键字等待其他异步操作完成。例如:
async function fetchData() { const response = await fetch('https://api.example.com/data'); const json = await response.json(); return json; } fetchData().then(data => console.log(data));
在上面的代码中,fetchData 函数使用 await 等待 fetch 和 response.json 方法的异步操作完成。fetch 方法返回一个 Promise 对象,response.json 也返回一个 Promise 对象。await 关键字会暂停函数的执行,直到 Promise 对象被解析为一个值或被拒绝为一个错误。
async 函数错误处理
在 async 函数中,错误通常通过抛出异常来处理。如果异步操作中发生了错误,async 函数会被拒绝并抛出一个异常。我们可以使用 try/catch 语句来处理这些异常。例如:
async function fetchData() { try { const response = await fetch('https://api.example.com/data'); const json = await response.json(); return json; } catch (error) { console.error(error); } } fetchData().then(data => console.log(data));
在上面的代码中,try/catch 语句用来处理 fetch 和 response.json 方法中的错误。如果发生错误,控制台会输出错误信息。然后,fetchData 函数会被拒绝并返回一个拒绝的 Promise 对象。
ES9 中的更好的错误处理
在 ES9 中,我们可以使用 async/await 的新语法来更好地处理 async 函数中的错误。下面是一个示例:
async function fetchData() { const response = await fetch('https://api.example.com/data') .catch(error => console.error(error)); const json = await response.json() .catch(error => console.error(error)); return json; } fetchData().then(data => console.log(data));
在上面的代码中,我们使用了 Promise 的 catch 方法来处理 fetch 和 response.json 方法中的错误。这样,我们就可以避免使用 try/catch 语句来处理异步操作中的错误。如果发生错误,catch 方法会返回一个拒绝的 Promise 对象,并输出错误信息。
另外,我们还可以使用 Promise.allSettled 方法来处理多个异步操作中的错误。例如:
async function fetchData() { const [response1, response2] = await Promise.allSettled([ fetch('https://api.example.com/data1'), fetch('https://api.example.com/data2') ]); const data1 = response1.status === 'fulfilled' ? await response1.value.json() : null; const data2 = response2.status === 'fulfilled' ? await response2.value.json() : null; return { data1, data2 }; } fetchData().then(data => console.log(data));
在上面的代码中,我们使用 Promise.allSettled 方法来等待多个异步操作完成。这个方法返回一个 Promise 对象,它会等待所有操作完成并返回一个数组,每个数组元素都是一个对象,包含操作的状态和结果。我们可以使用对象的 status 属性来判断操作是否成功。如果成功,我们使用 value 属性来获取结果。如果失败,我们返回 null。
总结
ES9 引入了一些新的语法来更好地处理 async 函数中的错误。我们可以使用 Promise 的 catch 方法来处理单个异步操作中的错误,也可以使用 Promise.allSettled 方法来处理多个异步操作中的错误。这些新的语法让我们更轻松地编写异步代码,并更好地处理错误。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c1f558add4f0e0ffbf2a7a