例如
p = new Promise(function (resolve, reject) {
throw 'err';
});
p.done();
Run Code Online (Sandbox Code Playgroud)
在大多数promise polyfill库中,done将抛出一个错误,当前执行将退出.
但如果我们使用p.then()
,什么都不会发生.承诺吞噬了这个错误.如果我们使用p.catch
,我们无法退出当前执行.我希望实现以下目标:
try {
// something
} catch (err) {
if (check(err)) {
throw err;
}
}
Run Code Online (Sandbox Code Playgroud) 不久前,v8获得了检测被拒绝但没有附加处理程序(提交)的Promises的功能.这在Chrome中作为一个很好的控制台错误登陆,特别适用于当您输入错误或忘记附加处理程序时:
我想添加一个处理程序来执行某些操作(例如,向错误报告服务报告),类似于未捕获的异常模式:
window.addEventListener("error", handler);
Run Code Online (Sandbox Code Playgroud)
或者,我正在寻找任何机制,当一个promise被拒绝但是没有在那个tick上处理时,我可以用它来自动调用某种回调.
我正在创建一个webapp并试图捕获vue.js webapp中任何地方抛出的所有错误.
我正在查看errorHandler,但它只捕获渲染或观察者期间的错误,如上所述:
在组件呈现和观察者期间为未捕获的错误分配处理程序.使用错误和Vue实例调用处理程序.
从这个问题中得到提示,我写了以下代码:
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
console.log('Inside window.onerror')
console.log(errorMsg, ' ', url, ' ', lineNumber, ' ', column, ' ', errorObj)
return false
}
window.addEventListener('error', function (e) {
console.log('Inside error Listener', e.message)
})
Run Code Online (Sandbox Code Playgroud)
上面两个都被调用,但我没有任何关于这些错误的细节.在所有的情况下,我得到errorMessage
的script error
有什么可以更好地获取所有错误的详细信息并将其发送到像哨兵这样的集中位置.
我想在Vue.JS中具有全局错误处理,例如Angular 2+中的错误处理系统。我已经做了很多尝试,但是找不到实现这种处理的好方法。
想象一下,您有很多服务方法,这些方法应该一个接一个地运行(我是说彼此内部),因此在prevoius服务中编写然后catch方法的方法是如此丑陋且不干净,现在我正在寻找实现此类的干净方法道路。我希望你明白我的意思。
我正在构建一个实现自定义错误处理程序的角度应用程序。
当你有一个自定义的错误处理程序并且当一个 observable 与 http 一起使用并且当错误没有被捕获时,使用一个 catch 块,如下所示
this.http.get('/doesntExist').subscribe();
Run Code Online (Sandbox Code Playgroud)
自定义 ErrorHandler 的 handleError() 函数获取一个 HttpErrorResponse 对象,该对象可用于获取必要的信息并全局处理错误。但是当你使用承诺时,就像下面这样
this.http.get('/doesntExist').toPromise();
Run Code Online (Sandbox Code Playgroud)
而不是 HttpErrorResponse ,将抛出一个字符串说
错误:未捕获(承诺):HttpErrorResponse:
并且您无法在 handleError() 方法中真正获得错误信息。你可以在这里看到它的实际效果
这是理想的行为吗?难道我做错了什么?有什么解决方法吗?请帮忙。我被卡住了;
更新
控制台中字符串错误的堆栈跟踪
Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":[],"lazyUpdate":null},"status":200,"statusText":"OK","url":"https://angular-promise-bug.stackblitz.io/doesntExist","ok":false,"name":"HttpErrorResponse","message":"Http failure during parsing for https://angular-promise-bug.stackblitz.io/doesntExist","error":{"error":{},"text":"<!DOCTYPE html>\n<html>\n<head>\n <link href=\"https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700|Lato:400,700,900\" rel=\"stylesheet\">\n <base href=\"/\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\n <link rel=\"stylesheet\" media=\"screen\" href=\"https://c.staticblitz.com/assets/preview-8222014a50f8588c56d057621cdaf871.css\" />\n <script src=\"https://c.staticblitz.com/assets/common-bd7eff1ca58185bf8131b.js\" crossorigin=\"anonymous\"></script>\n <script src=\"https://c.staticblitz.com/assets/ext-fb68da629568861fd08cb.js\" crossorigin=\"anonymous\"></script>\n <script src=\"https://c.staticblitz.com/d/webcontainer.a966dcc4085d3fff5bb.js\" crossorigin=\"anonymous\"></script>\n <script src=\"https://c.staticblitz.com/assets/preview-3a0c9433aa42f56dbd90b.js\" crossorigin=\"anonymous\"></script>\n <script>(function(){_preboot(\"https://l.staticblitz.com/b/v1/angular-promise-bug/f9f42b37e9b\",{p:\"stackblitz\",a:\"AIzaSyBZSvuCzbUhuRrSps-HjM5bFClLPaFF9Vg\",o:true})})()</script>\n</head>\n<body></body>\n</html>\n"}}
at resolvePromise (angular-promise-bug.stackblitz.io/turbo_modules/zone.js@0.8.26/dist/zone.js:814)
at eval (angular-promise-bug.stackblitz.io/turbo_modules/zone.js@0.8.26/dist/zone.js:724)
at SafeSubscriber.eval [as …
Run Code Online (Sandbox Code Playgroud) javascript ×3
promise ×2
vue.js ×2
vuejs2 ×2
angular ×1
angular5 ×1
ecmascript-6 ×1
es6-promise ×1