Использование и улавливание RangeError в javascript

Я собираюсь бросить исключение с помощью RangeError и хотел проверить, что я использую его правильно и как его лучше всего поймать.

У меня есть функция, которая может бросить RangeError или TypeError, как это

function saveNumber(val) {
  // Only accept numbers.
  if (typeof val !== 'number') {
    throw new TypeError();
  }

  // Error if the number is outside of the range.
  if (val > max || val < min) {
    throw new RangeError();
  }

  db.save(val);
}

Я хотел бы назвать это и иметь дело только с RangeError. Как лучше всего это сделать?

3 ответов


try {
  saveNumber(...);
} catch (e) {
  if (e instanceof TypeError) {
    // ignore TypeError
  } 
  else if(e instanceof RangeError) {
    // handle RangeError
  }
  else {
    // something else
  } 
}

источник


прямо из документация MDN по try-catch:

try {
    saveNumber(...);
} catch (e if e is instanceof RangeError) {
    // Do something
} catch (e) {
    // re-throw whatever you don't want to handle
    throw e;
}

чуть более элегантный ответ:

switch (error.constructor) {
    case NotAllowedError:
        return res.send(400);
    case NotFoundError:
        return res.send(404);
    default:
        return res.send(500);
}