TransWikia.com

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

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

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

2 Answers

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

/**
 * 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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP