Search code examples
javascriptgoogle-chromescreen-orientationdomexception

How to catch DOMException in Chrome?


I get this error:

Uncaught (in promise) DOMException: lockOrientation() is not available on this device.
  code: 9
  message: "lockOrientation() is not available on this device."
  name: "NotSupportedError"

when I run the following code in Chrome:

try {
  screen.orientation.lock('portrait');
} catch (error) {
  // whatever
}

The fact that the error is being thrown is expected, since Desktop Chrome doesn't support orientation locking. I'd like to catch the error so it doesn't litter the console, but wrapping it in a try...catch block doesn't seem to work.

Why can't I catch it? Am I missing something?


Solution

  • Synchronous try/catch does not work here, because screen.orientation.lock('portrait'); actually returns a Promise which is throwing the error. This part of the error shows the exception is thrown in the promise.

    Uncaught (in promise) DOMException: lockOrientation() is not available on this device.

    To handle the exception, you can attach a catch callback.

    screen.orientation.lock('portrait').catch(function(error) {
        console.log(error);
    });
    

    Alternately in an async function, you can try/catch an await.

    try {
        await screen.orientation.lock('portrait');
    }
    catch (error) {
        console.log(error);
    }