javaScriptの異常な捕獲について
21901 ワード
異常捕獲はブラウザ側とnodejs側に分かれています.ブラウザ nodejs ブラウザ
1.疑わしい領域は
1. わしいエリアにtry…catchを して、 コードを できません.
1.疑わしい領域は
try...catch
を追加して、非同期コードを処理できません.2.グローバル監視JS異常:window.onerror 3.グローバル監視静的リソース異常:window.addEventListener 4.グローバルキャプチャcatchがないpromise異常:unhandledjectionwindow.addEventListener("unhandledrejection", function(e){
// e.preventDefault(); //
console.log(' :', e);
});
Promise.reject('promise error').then();
5.iframe異常:window.error 6.VUE error HandlerとReact component DidCatch 7.ウェブページの崩壊を監視する:windowオブジェクトのロードとbeforeunloadwindow.addEventListener('load', function () {
sessionStorage.setItem('good_exit', 'pending');
setInterval(function () {
sessionStorage.setItem('time_before_crash', new Date().toString());
}, 1000);
});
window.addEventListener('beforeunload', function () {
sessionStorage.setItem('good_exit', 'true');
});
if(sessionStorage.getItem('good_exit') &&
sessionStorage.getItem('good_exit') !== 'true') {
/*
insert crash logging code here
*/
alert('Hey, welcome back from your crash, looks like you crashed on: ' + sessionStorage.getItem('time_before_crash'));
}
8.Script ErrorクロスドメインcrossOrigin解決
nodejs1. わしいエリアにtry…catchを して、 コードを できません.
try {
setTimeout(() => {
throw new Error('error');
})
} catch(e) {
console.log(' , ');
console.log(e);
}
2.イベント で を するconst events = require('events');
//
const emitter = new events.EventEmitter();
// error
emitter.addListener('error', (e) => {
//
console.log(11122222); // 1112222
console.log(e);
});
// error
emitter.emit('error', new Error(' '))
3.calbackの const fs = require('fs');
fs.mkdir('/dir', (e) => {
if (e) {
console.log(' ');
console.log(e);
} else {
console.log(' ');
}
});
4.Promise は な で、 されていないpromiseのrejectは に かに べます.これは が しいのではありません.new Promise((resolve, reject) => {
throw new Error('error');
}).then(() => {
// 。。。。
}).catch((e) => {
console.log(' ');
console.log(e);
});
//
process.on('unhandledRejection', (reason, p) => {
console.log("Unhandled Rejection at: Promise ", p, " reason: ", reason);
// application specific logging, throwing an error, or other logic here
});
5.Async/Await const testFunc = function() {
return new Promise((resolve, reject) => {
throw new Error('error');
});
};
async function testAsync() {
try {
await testFunc();
} catch (e) {
console.log(' , ');
console.log(e);
}
}
testAsync();
6.process (この はすべての を することができる).process.on('uncaughtException', (e) => {
console.log(' , ');
console.log(e);
});
function testFunc() {
throw new Error('error');
}
testFunc();
7.domain domainは、 と を む のタイプの な を することもできる.const domain = require('domain');
const d = domain.create();
d.on('error', (e) => {
console.log(' , ');
console.log(e);
});
d.run(() => {
throw new Error(' ');
});