2

一、Throw 异常捕获

1、JavaScript 抛出(throw)错误

当错误发生时,当事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息。描述这种情况的技术术语是:JavaScript 将抛出一个错误。

2、定义和用法

throw 语句允许我们创建自定义错误。
正确的技术术语是:创建或抛出异常(exception)。

throw exception
// 异常可以是 JavaScript 字符串、数字、逻辑值或对象。

3、Try...Catch 语句

try...catch 可以测试代码中的错误。try 部分包含需要运行的代码,而 catch 部分包含错误发生时运行的代码。

4、定义和用法

try/catch/finally 语句用于处理代码中可能出现的错误信息。
错误可能是语法错误,通常是程序员造成的编码错误或错别字。也 可能是拼写错误或语言中缺少的功能(可能由于浏览器差异)。
try 语句允许我们定义在执行时进行错误测试的代码块。
catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
finally 语句在 try 和 catch 之后无论有无异常都会执行。

try {
    tryCode - 尝试执行代码块
}
catch(err) {
    catchCode - 捕获错误的代码块
}
finally {
    finallyCode - 无论 try / catch 结果如何都会执行的代码块
}

注意: catch 和 finally 语句都是可选的,但你在使用 try 语句时必须至少使用一个。
提示: 当错误发生时, JavaScript 会停止执行,并生成一个错误信息。使用 throw 语句 来创建自定义消息(抛出异常)。如果你将 throw 和 try 、 catch一起使用,就可以控制程序输出的错误信息。

5、示例

function fn() {
  try {
    throw 'error'
  } catch (err) {
    console.log(err);
  }
}
fn();

二、Promise.reject() 异常捕获

1、定义和用法

Promise.reject()方法返回一个带有拒绝原因的Promise对象。
reason 表示Promise被拒绝的原因。。
静态函数Promise.reject返回一个被拒绝的Promise对象。

Promise.reject(reason).catch(reason =>{
   console.log(reason);
})

2、示例

function fn() {
  try {
    Promise.reject("reject");
  } catch (err) {
    console.log(err);
  }
}
fn();

async function fn() {
  try {
    await Promise.reject("reject");
  } catch (err) {
    console.log(err);
  }
}
fn();


因为try catch是同步的,执行到Promise.reject()时把它放到了异步任务队列里,没有立即执行Promise.reject()就向下执行了,同步任务执行完再回头把异步任务队列里的Promise.reject()回调函数拿出来执行就报错了。

3、捕获JS未处理的Promise错误 unhandledrejection

当Promise 被 reject 且没有 reject 处理器的时候,会触发 unhandledrejection 事件;这可能发生在 window 下,但也可能发生在 Worker 中。 这对于调试回退错误处理非常有用。unhandledrejection 继承自 PromiseRejectionEvent,而 PromiseRejectionEvent 又继承自 Event。因此unhandledrejection 含有 PromiseRejectionEvent 和 Event 的属性和方法。

window.addEventListener("unhandledrejection", event => {
  console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
window.onunhandledrejection = event => {
  console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};

window.addEventListener('unhandledrejection', function (event) {
  // ...您的代码可以处理未处理的拒绝...
  // 防止默认处理(例如将错误输出到控制台)
  event.preventDefault();
});

4、Promise.all() reject捕获

function fn(msg){
  return new Promise((resolve, reject)=>{
    return reject(msg);
  });
}
Promise.all([fn(1), fn(2)]).then(data=>{
  console.log('success', data);
}).catch(err=>{
  console.log('error', err);
})


默默
4 声望0 粉丝