Stack Overflow на русском Asked on December 23, 2021
Есть функция
function getData() {
try {
if (data !== 0) {
//какая-то логик
return value;
} else {
throw 'err null '; //выбрасываю исключение если 0
}
} catch (e) {
console.log('ERROR ' + e)
}
}
Есть функция которая принимает возвращенное значение
function setData() {
try {
var a=1;
console.log(a+getData());
}
catch (e) {
console.log(e); // не срабатывает
}
}
Как мне перекинуть исключение из одной функции в другую?
Для начала, я бы разделил исключения на типы. Для того, чтобы их разделить на типы нам необходимо реализовать свои исключения:
/**
* Parent Exception
*/
class DefaultException extends Error {
/**
* @param {string} message
*/
constructor(message) {
super(message);
this.name = this.constructor.name;
}
}
class GetDataException extends DefaultException {
/**
* @param {string} message
*/
constructor(message) {
super(message);
}
}
class SetDataException extends DefaultException {
/**
* @param {string} message
*/
constructor(message) {
super(message);
}
}
В будущем это можно будет и оснастить разной логикой. Теперь обновим ваш код:
function getData() {
try {
if (data !== 0) {
//какая-то логика
return value;
} else {
throw new GetDataException('Ошибка получения информации');
}
} catch (e) {
if (e instanceof GetDataException) {
// Можно прокинуть это исключение в какой-то обработчик
}
// В остальных случаях
throw e;
}
}
Аналогично с функций setData
.
Answered by Не быть рабом на Руси on December 23, 2021
Чтобы сделать то, что Вы хотите, надо создавать новое исключение в блоке catch
, тогда исключение будет перехвачено вызывающей функцией:
function getData() {
try {
if (data !== 0) {
//какая-то логик
return value;
} else {
throw 'err null '; //выбрасываю исключение если 0
}
} catch (e) {
console.log('ERROR ' + e);
throw e;
}
}
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/throw#Examples
Answered by ReinRaus on December 23, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP