Я использую raygun, чтобы отслеживать ошибки моего front-end. Raygun использует EventError, подключившись к свойству window.onerror
. Все идет нормально.babel polyfill ловит мои ошибки вместо того, чтобы пустить их пузырь
Мое приложение написано на ES6 и использует генераторы. Я использую babel, чтобы написать код, совместимый с веб-браузером ES6, и webpack, чтобы связать его. Поскольку я использую generators
, я также импортирую Babel polyfill
в свой HTML вместе с моим entry chunk
. Я не импортирую его в свое приложение, потому что HTML-страница может загружать другие приложения, что, в свою очередь, может попытаться запустить полипол. Таким образом, запускается только экземпляр polyfill.
<script src="/container/lib/polyfill.js"></script>
<script src="/container/vendor.bundle.js"></script>
<script src="/container/myApp.js"></script>
Чтобы убедиться window.onerror
работы, я первый написал свой собственный обработчик ошибок (ну, я скопировал из MDN):
window.onerror = function (msg, url, lineNo, columnNo, error) {
var string = msg.toLowerCase();
var substring = "script error";
if (string.indexOf(substring) > -1){
alert('Script Error: See Browser Console for Detail');
} else {
var message = [
'Message: ' + msg,
'URL: ' + url,
'Line: ' + lineNo,
'Column: ' + columnNo,
'Error object: ' + JSON.stringify(error)
].join(' - ');
alert(message);
}
return false;
};
так, запустив свой код, я бы ожидать замечательный старинный сигнал.
К сожалению, то, что я получаю это сообщение в моем журнале ошибок, но window.onerror крючок не поймать его:
Unhandled promise rejection Error: test
Analisi dello stack:
[email protected]:///../index.js?:86:11
[email protected]:///../index.js?:161:21
[email protected]://172.16.0.2/container/lib/polyfill.js:6151:37
[email protected]://172.16.0.2/container/lib/polyfill.js:6442:22
defineIteratorMethods/</prototype[method]@http://172.16.0.2/container/lib/polyfill.js:6203:16
[email protected]:////Users/matteo/Documents/em3/container/web_src/lib/utils.js?:25:9
initSteps$/<@webpack:///../index.js?:148:25
[email protected]://172.16.0.2/container/lib/polyfill.js:3911:22
notify/<@http://172.16.0.2/container/lib/polyfill.js:3924:28
[email protected]://172.16.0.2/container/lib/polyfill.js:1209:9
MutationCallback*[64]</[email protected]://172.16.0.2/container/lib/polyfill.js:1228:5
[198]<@http://172.16.0.2/container/lib/polyfill.js:3837:26
[email protected]://172.16.0.2/container/lib/polyfill.js:1:246
s/<@http://172.16.0.2/container/lib/polyfill.js:1:305
[295]<@http://172.16.0.2/container/lib/polyfill.js:6017:1
[email protected]://172.16.0.2/container/lib/polyfill.js:1:246
s/<@http://172.16.0.2/container/lib/polyfill.js:1:305
[1]</<@http://172.16.0.2/container/lib/polyfill.js:5:1
[1]<@http://172.16.0.2/container/lib/polyfill.js:2:2
[email protected]://172.16.0.2/container/lib/polyfill.js:1:246
[email protected]://172.16.0.2/container/lib/polyfill.js:1:425
@http://172.16.0.2/container/lib/polyfill.js:1:11
в то время как, если я перееду мой throw new Error('test');
вне моей функции генератора, я получаю ожидаемый сигнал тревога , Как я могу избежать такого поведения?
сделал вы заметили строку 'tryCatch @ http: //172.16.0.2/container/lib/polyfill.js: 6151: 37'? Я думаю, polyfill.js ловит все – Bertuz