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