Используя SpiderMonkey, вы можете использовать условные блоки catch для маршрутизации исключений в соответствующий обработчик.V8 эквивалентность улова SpiderMonkey (e, если e ..)
try {
// function could throw three exceptions
getCustInfo("Lee", 1234, "[email protected]")
}
catch (e if e == "InvalidNameException") {
// call handler for invalid names
bad_name_handler(e)
}
catch (e if e == "InvalidIdException") {
// call handler for invalid ids
bad_id_handler(e)
}
catch (e if e == "InvalidEmailException") {
// call handler for invalid email addresses
bad_email_handler(e)
}
catch (e){
// don't know what to do, but log it
logError(e)
}
пример из MDN
Однако в V8 этот код обыкновение компилировать любые предложения или работы обходные, кроме очевидного.
Будет ли очевидная вещь, оператор switch может быть даже лучше, ваш верный e нет подобных реализаций? –
Да. Это нестандартное расширение в SpiderMonkey. –
Side Note: это не обрабатывает такие вещи, как трассировки стека, если вы хотите не поймать исключение определенного типа. –