一、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);
})
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。