错误不上报原因
代码中已经使用catch,则不会再上报了
错误类型
SyntaxError 语法错误
SyntaxError: Unexpected token '<'
Syntax/ˈsɪntæks/语法, 编译阶段的异常,可以通过配置编辑器校验工具,避免这类报错
ReferenceError 引用错误
- ReferenceError: $ is not defined
TypeError 类型错误
TypeError: Cannot read property 'length' of undefined
对值进行不合理操作时会发生,引用null、undefined等
RangeError 范围错误
- RangeError: Invalid array length
- RangeError: Maximum call stack size exceeded
第一种发生在调用数组长度不足,第二中共常发生在递归
Error 与自定义异常
Error是所有错误的积累,其他错误继承该类型,所有错误类型都包含
- Error.prototype.message: 错误消息
- Error.prototype.name: 错误名称
- Error.prototype.stack: 堆栈信息
通过继承Error实现自定义的错误类型,像React、Vue、Axios等框架都会封装一些自定义异常
class MyError extends Error {
constructor(message) {
super();
this.name = 'MyError';
this.message = message;
}
}
其他Error
Unable to find node on an unmounted component
react和react-dom版本不统一,可能时某个插件的依赖导致
ResizeObserver loop limit exceeded
该报错Ant Design官方处理方式是忽略,重新渲染反应期间可能会触发ResizeObserver loop limit exceeded(多发于组件第一次注册和动态元素)
开启忽略
Sentry.init({ ignoreErrors: [ "ResizeObserver loop limit exceeded" ], });[React Intl] Could not find required
intlobject.<IntlProvider>needs to exist in the component ancestry.issueantd Modal组件
<IntlProvider>未包裹,<FormattedMessage>是在Modal render的时候才求值的,而formatMessage()API是在组件执行就开始求值ChunkLoadError:Loading Chunk Fail
- 异步加载组件,资源不会一下子全加载,而是你点到哪个界面就加载那个界面的资源。
- 重新打包发布后hash值不一样,找不到旧的资源。
解决:
useEffect(() => { const handleLoadingChunkError = (error) => { // Loading chunk报错重新加载 const loadFailed = new RegExp(/Loading chunk (\d)+ failed/g) if (error && error.message && error.message.match(loadFailed)) { let loadingChunkNum = ss.getItem('loadingChunkNum'); loadingChunkNum = isNumber(loadingChunkNum) ? loadingChunkNum + 1 : 0; // 刷新一次后不再刷新 if (loadingChunkNum > 1) { // 重置次数 ss.setItem('loadingChunkNum', 0); } else { ss.setItem('loadingChunkNum', loadingChunkNum); window.location.reload() } } } window.addEventListener('error', handleLoadingChunkError); return () => { window.removeEventListener('error', handleLoadingChunkError); } }, [])注意 window.onError不能捕获到资源加载失败,必须使用window.addEventListener('error')捕获资源加载失败情况
UnKnown
Non-Error promise rejection captured with keys: errorFields, outOfDate, values
Sentry自定义错误,使用Promise发生错误没有catch的时候,Sentry中通过unhandledrejection进行捕获InternalError
网络错误
URIError
decodeURI, decodeURIComponent, encodeURI, encodeURIComponent四种方法传参错误时会产生这种异常,参考这篇文章
ISSUE
config is not definedindex.html config报错Cannot read properties of null (reading 'editor')quick-email-editor项目报错p.current is nullquick-email-editor项目报错afterLogin window.recordInfoCase.reset is not functionCannot read properties of null (reading 'staffInfo')Cannot read properties of null (reading 'type')GuideModal.tsx currentGuide?.typeCannot read properties of undefined (reading 'timeUnit')对应bug2806Unexpected end of JSON inputJSON.parse(localStorage.getItem('user_code_auth') ?? '') UserInfoSecurityError Failed to execute 'replaceState' on 'History'stack overflowFailed to execute 'getRangeAt' on 'Selection': 0 is not a valid index.stack overflow
京ICP备2022027737号
Copyright © 2022 - present @wangxiang