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 …
,