Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/imweb/tryjs
Wrap async function and catch the error
https://github.com/imweb/tryjs
Last synced: 28 days ago
JSON representation
Wrap async function and catch the error
- Host: GitHub
- URL: https://github.com/imweb/tryjs
- Owner: imweb
- Created: 2014-09-17T15:31:01.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2014-12-17T16:21:37.000Z (about 10 years ago)
- Last Synced: 2023-08-09T19:03:04.118Z (over 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 387 KB
- Stars: 16
- Watchers: 12
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
tryjs
=====> window.onerror在webkit中对于跨域的脚本错误无法捕获其stack,经常让我们无法定位上报的问题,tryjs利用try-catch将函数包裹起来,让错误捕获变得容易。
原理
----对于基于AMD和jQuery的网站,几乎所有业务函数都是通过回调异步触发的,所以我们只需要将所有异步函数包裹起来就可以捕获到大部分错误。
例如,对于require函数,一般是这样使用的:
```javascript
require(['./main'],
// 想办法把这个函数包裹起来
function (main) {
// 实际上这里才是在调用
main.init();
});
```类似的对于setTimeout函数,一般可以这样:
```javascript
setTimeout(
// 想办法把这个函数包裹起来就行了
function () {
dosomthing();
},
1000
);
```包裹了什么?
---------* setTimeout
* setInterval
* jQuery event add
* jQuery ajax
* require & define为什么不对IE10以下版本进行包裹?
---------------------------> 我们建议,在IE10以下版本通过window.onerror来捕获错误,基于以下几点原因:
* IE10以下版本中catch的error不包含error.stack,跟踪方式比起window.onerror没有优势
* 单论性能,window.onerror比try catch要好
* IE10以下版本中window.setTimeout为只读方法,无法篡改替换
* IE6、IE7、IE8中window.setTimeout和window.setInterval为Object,非Function,没有继承apply和call方法