ESLint согласованный возврат и вложенные обратные вызовы

У меня есть некоторые проблемы с правилом последовательного возврата, предоставленным ESLint. Код ниже будет бросать consistent-return предупреждение для User.findOne функция обратного вызова. Насколько я могу сказать, я могу только запустить .remove действия, если нет findErr и если есть existingUser,

Какова была бы лучшая практика для избежания этих вложенных обратных вызовов? Я хотел бы передать consistent-return предупреждение, но на самом деле не видел никаких решений в Интернете.

function remove(req, res) {
  User.findOne({ username: req.params.username }, (findErr, existingUser) => {
    if (findErr) return res.status(500).send(errorHandler.getErrorMessage(findErr));
    if (!existingUser) return res.status(404).send({ message: 'User not found' });

    existingUser.remove((removeErr) => {
      if (removeErr) return res.status(500).send(errorHandler.getErrorMessage(removeErr));

      return res.json({ message: `${existingUser.username} successfully deleted` });
    });
  });
}

1 ответ

Решение

Какова была бы лучшая практика для избежания этих вложенных обратных вызовов?

Обещания.

Я хотел бы передать предупреждение о последовательном возвращении

Тогда вам лучше не использовать досрочный возврат. Вместо этого напишите

function remove(req, res) {
  User.findOne({ username: req.params.username }, (findErr, existingUser) => {
    if (findErr) res.status(500).send(errorHandler.getErrorMessage(findErr));
    else if (!existingUser) res.status(404).send({ message: 'User not found' });

    else existingUser.remove((removeErr) => {
      if (removeErr) res.status(500).send(errorHandler.getErrorMessage(removeErr));

      else res.json({ message: `${existingUser.username} successfully deleted` });
    });
  });
}

Кроме того, вы должны быть в состоянии сделать

function remove(req, res) {
  User.findOne({ username: req.params.username }, (findErr, existingUser) => {
    if (findErr) {
      res.status(500).send(errorHandler.getErrorMessage(findErr));
      return;
    }
    if (!existingUser) {
      res.status(404).send({ message: 'User not found' });
      return;
    }
    existingUser.remove((removeErr) => {
      if (removeErr) {
        res.status(500).send(errorHandler.getErrorMessage(removeErr));
        return;
      }
      res.json({ message: `${existingUser.username} successfully deleted` });
    });
  });
}

Вы также можете включить { "treatUndefinedAsUnspecified": true } вариант и использование return void …,

Другие вопросы по тегам