JavaScript:
处理错误

如何处理:

这里是经典的try-catch块:

try {
  // 可能会抛出错误的代码
  let result = potentiallyRiskyOperation();
  console.log('成功:', result);
} catch (error) {
  // 如果抛出错误应该怎么办
  console.error('糟糕:', error.message);
}

当没有错误发生时的示例输出:

成功:42

当发生错误时:

糟糕:出了些问题

对于涉及到promise的异步代码,请在async函数中使用try-catch

async function fetchData() {
  try {
    let data = await fetch('https://api.example.com/data');
    console.log('数据获取成功:', data);
  } catch (error) {
    console.error('获取数据错误:', error.message);
  }
}

fetchData();

深入探讨

JavaScript中的错误处理已经发展。早在ES3时代(大约1999年),我们只有try-catch块。虽然不是非常灵活,但它完成了任务。

ES6(2015)引入了Promises,并提供了.then().catch(),使我们能够更优雅地处理异步错误。

fetch('https://api.example.com/data')
  .then(data => console.log('数据获取成功:', data))
  .catch(error => console.error('获取数据错误:', error.message));

就实现细节而言,当抛出一个错误时,JavaScript引擎会创建一个带有诸如messagestack等有用属性的Error对象。您还可以通过扩展Error类来制作自定义错误类型——这对于更复杂的应用程序来说很方便。

其他选择?您可以忽略错误处理(坏主意),使用具有错误优先参数的回调(你好,Node.js风格),或者使用提供他们看法的库和框架来进行更高级的处理。

另见

有关错误处理的更多信息: