一、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);})