关于javascript:Throw-与-Promisereject-异常捕获

9次阅读

共计 2075 个字符,预计需要花费 6 分钟才能阅读完成。

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

正文完
 0