How can you bubble up errors so they can be caught in the same try/catch block?
Have your function throw a specific type of object, and then in your catch block check to see if (err instanceof MyExceptionObj)
and handle appropriately, otherwise re-throw it.
By re-throw I mean:
If the caught exception object isn't one you can handle, you should re-throw it to give any catch blocks further up a chance to handle it. If none do, the browser will catch it and display a JS error.
try { if ($.browser.msie) { throw new UnsupportedBrowserException(); } } catch (ex) { if (ex instanceof UnsupportedBrowserException) { alert('Your browser isn't supported.'); } else { // We don't know how to handle this exception, throw it back. throw ex; } }
You probably wouldn't do this in the real world.
You can only conditionally catch exceptions in JavaScript 1.7 and higher. Refer to the following:
try {
0();
} catch (ex if ex instanceof TypeError) {
// only catch TypeErrors
}
Otherwise, you have to catch all exceptions, do an instanceof
check, and then rethrow the exceptions if the check returns true.