Use common code to handle Promise errors

This commit is contained in:
Pierre Ossman 2017-03-02 15:46:05 +01:00
parent 732233eda0
commit 36653517a5
2 changed files with 38 additions and 64 deletions

View File

@ -1169,6 +1169,23 @@ var loader;
// <script type="module"> support // <script type="module"> support
var anonSources = {}; var anonSources = {};
if (typeof document != 'undefined' && document.getElementsByTagName) { if (typeof document != 'undefined' && document.getElementsByTagName) {
function handleError(err) {
// dispatch an error event so that we can display in errors in browsers
// that don't yet support unhandledrejection
try {
var evt = new Event('error');
} catch (_eventError) {
var evt = document.createEvent('Event');
evt.initEvent('error', true, true);
}
evt.message = err.message;
evt.error = err;
window.dispatchEvent(evt);
// throw so it still shows up in the console
throw err;
}
function ready() { function ready() {
document.removeEventListener('DOMContentLoaded', ready, false ); document.removeEventListener('DOMContentLoaded', ready, false );
@ -1180,22 +1197,7 @@ if (typeof document != 'undefined' && document.getElementsByTagName) {
if (script.type == 'module' && !script.loaded) { if (script.type == 'module' && !script.loaded) {
script.loaded = true; script.loaded = true;
if (script.src) { if (script.src) {
loader.import(script.src).catch(function(err) { loader.import(script.src).catch(handleError);
// dispatch an error event so that we can display in errors in browsers
// that don't yet support unhandledrejection
try {
var evt = new Event('error');
} catch (_eventError) {
var evt = document.createEvent('Event');
evt.initEvent('error', true, true);
}
evt.message = err.message;
evt.error = err;
window.dispatchEvent(evt);
// throw so it still shows up in the console
throw err;
});
} }
// anonymous modules supported via a custom naming scheme and registry // anonymous modules supported via a custom naming scheme and registry
else { else {
@ -1206,22 +1208,7 @@ if (typeof document != 'undefined' && document.getElementsByTagName) {
var anonName = resolveIfNotPlain(uri, baseURI); var anonName = resolveIfNotPlain(uri, baseURI);
anonSources[anonName] = script.innerHTML; anonSources[anonName] = script.innerHTML;
loader.import(anonName).catch(function(err) { loader.import(anonName).catch(handleError);
// dispatch an error event so that we can display in errors in browsers
// that don't yet support unhandledrejection
try {
var evt = new Event('error');
} catch (_eventError) {
var evt = document.createEvent('Event');
evt.initEvent('error', true, true);
}
evt.message = err.message;
evt.error = err;
window.dispatchEvent(evt);
// throw so it still shows up in the console
throw err;
});
} }
} }
} }

View File

@ -9,6 +9,23 @@ var loader;
// <script type="module"> support // <script type="module"> support
var anonSources = {}; var anonSources = {};
if (typeof document != 'undefined' && document.getElementsByTagName) { if (typeof document != 'undefined' && document.getElementsByTagName) {
function handleError(err) {
// dispatch an error event so that we can display in errors in browsers
// that don't yet support unhandledrejection
try {
var evt = new Event('error');
} catch (_eventError) {
var evt = document.createEvent('Event');
evt.initEvent('error', true, true);
}
evt.message = err.message;
evt.error = err;
window.dispatchEvent(evt);
// throw so it still shows up in the console
throw err;
}
function ready() { function ready() {
document.removeEventListener('DOMContentLoaded', ready, false ); document.removeEventListener('DOMContentLoaded', ready, false );
@ -20,22 +37,7 @@ if (typeof document != 'undefined' && document.getElementsByTagName) {
if (script.type == 'module' && !script.loaded) { if (script.type == 'module' && !script.loaded) {
script.loaded = true; script.loaded = true;
if (script.src) { if (script.src) {
loader.import(script.src).catch(function(err) { loader.import(script.src).catch(handleError);
// dispatch an error event so that we can display in errors in browsers
// that don't yet support unhandledrejection
try {
var evt = new Event('error');
} catch (_eventError) {
var evt = document.createEvent('Event');
evt.initEvent('error', true, true);
}
evt.message = err.message;
evt.error = err;
window.dispatchEvent(evt);
// throw so it still shows up in the console
throw err;
});
} }
// anonymous modules supported via a custom naming scheme and registry // anonymous modules supported via a custom naming scheme and registry
else { else {
@ -46,22 +48,7 @@ if (typeof document != 'undefined' && document.getElementsByTagName) {
var anonName = resolveIfNotPlain(uri, baseURI); var anonName = resolveIfNotPlain(uri, baseURI);
anonSources[anonName] = script.innerHTML; anonSources[anonName] = script.innerHTML;
loader.import(anonName).catch(function(err) { loader.import(anonName).catch(handleError);
// dispatch an error event so that we can display in errors in browsers
// that don't yet support unhandledrejection
try {
var evt = new Event('error');
} catch (_eventError) {
var evt = document.createEvent('Event');
evt.initEvent('error', true, true);
}
evt.message = err.message;
evt.error = err;
window.dispatchEvent(evt);
// throw so it still shows up in the console
throw err;
});
} }
} }
} }