Передать исключение в другую функцию JS

Есть функция

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); // не срабатывает
    }
}

Как мне перекинуть исключение из одной функции в другую?


Ответы (2 шт):

Автор решения: ReinRaus

Чтобы сделать то, что Вы хотите, надо создавать новое исключение в блоке 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

→ Ссылка
Автор решения: doox911

Для начала, я бы разделил исключения на типы. Для того, чтобы их разделить на типы нам необходимо реализовать свои исключения:

/**
 * Parent Exception
 */
class DefaultException extends Error {
  
  /**
   * @param {string} message
   */
  constructor(message) {
    super(message);
    this.name = this.constructor.name;
  }
}

GetDataException extends DefaultException {

  /**
   * @param {string} message
   */
  constructor(message) {
    super(message);
  }
}

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.

→ Ссылка