Узел выражать плохую практику? - PullRequest
0 голосов
/ 19 октября 2018

Добрый день,

Я пытаюсь стандартизировать свой блок try {} catch() {} по всем моим маршрутам.

Я создал класс Controller следующим образом:

const { handleRouteError } = require('../handleRouteError');

class Controller {
  async tryFunction(promise, onSuccess, onFail) {
    try {
      const data = await promise;
      onSuccess(data);
    } catch (error) {
      handleRouteError(error);
      onFail(error);
    }
  }
}

module.exports = Controller;

И я использую это в своем роутере следующим образом:

const { getDays } = require('./controllers/getDays');
const controller = new Controller;

router.get('/days', async function getDayDays(req, res, next) {
  await controller.tryFunction(
    getDays(res.locals.user_id),
    (data) => res.json(data),
    (err) => next(err)
  );
});

Мои вопросы:

  1. Это плохая практика - передавать функции onSuccess и onFail какЯ сделал?Все мнения приветствуются!
  2. Не будет ли он занимать много памяти на сервере?

1 Ответ

0 голосов
/ 19 октября 2018

Я бы попытался придерживаться встроенной обработки ошибок, а не придумывать свою собственную.

Если вы намерены вызвать handleRouterError с ошибкой перед передачей ошибки вызывающей стороне, вы можете сделать что-то вроде этого:

class Controller {
  async resolve(promise) {
    try {
      return await promise;
    } catch (error) {
      handleRouteError(error);
      throw error;
    }
  }
}

и использовать метод resolve, подобный этому:

const { getDays } = require('./controllers/getDays');
const controller = new Controller;

router.get('/days', async function getDayDays(req, res, next) {
  try {
    res.json(await controller.resolve(getDays(res.locals.user_id)));
  } catch (err) {
    next(err)
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...