Skip to content

Commit

Permalink
feat: add original stacktrace to error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
johannesjo committed Mar 3, 2018
1 parent 300caf0 commit c893fe9
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 12 deletions.
7 changes: 4 additions & 3 deletions app-src/scripts/_app.js
Expand Up @@ -342,9 +342,10 @@
function initElectronErrorHandling(SimpleToast, IS_ELECTRON) {
const ERROR_EV = 'ELECTRON_ERROR';
if (IS_ELECTRON) {
window.ipcRenderer.on(ERROR_EV, (ev, err) => {
SimpleToast('ERROR', 'Electron Error: ' + err);
console.error('Electron Error: ' + err);
window.ipcRenderer.on(ERROR_EV, (ev, errorData) => {
SimpleToast('ERROR', 'Electron Error: ' + errorData.error);
console.error('Electron Error: ' + errorData.error);
console.log('Stacktrace: ', errorData.stack);
});
}
}
Expand Down
25 changes: 16 additions & 9 deletions electron/error-handler.js
@@ -1,37 +1,44 @@
const WAIT_FOR_WIN_TIMEOUT_DURATION = 5000;
const WAIT_FOR_WIN_TIMEOUT_DURATION = 4000;
const ERROR_EV = 'ELECTRON_ERROR';
const mainWinMod = require('./main-window');

module.exports = (e = 'UNDEFINED ERROR', additionalLogInfo) => {
if (isReadyForFrontEndError()) {
handleError(e, additionalLogInfo);
const errObj = new Error(e);

if (_isReadyForFrontEndError()) {
_handleError(e, additionalLogInfo, errObj);
} else {
// try again a little later, when window might be ready
setTimeout(() => {
handleError(e, additionalLogInfo);
_handleError(e, additionalLogInfo, errObj);
}, WAIT_FOR_WIN_TIMEOUT_DURATION);
}
};

function isReadyForFrontEndError() {
function _isReadyForFrontEndError() {
const mainWin = mainWinMod.getWin();
const isAppReady = mainWinMod.getIsAppReady();
return mainWin && mainWin.webContents && isAppReady;
}

function handleError(e, additionalLogInfo) {
function _handleError(e, additionalLogInfo, errObj) {
const mainWin = mainWinMod.getWin();
const stack = errObj.stack;

console.error('ERR', e);
console.log(stack);

if (additionalLogInfo) {
console.log('Additional Error info: ', additionalLogInfo);
}

if (isReadyForFrontEndError()) {
mainWin.webContents.send(ERROR_EV, e);
if (_isReadyForFrontEndError()) {
mainWin.webContents.send(ERROR_EV, {
error: e,
stack: stack,
});
} else {
console.error('ERR', 'Frontend not loaded');
throw new Error(e)
throw errObj;
}
}

0 comments on commit c893fe9

Please sign in to comment.