我遇到了ESLint提供的consistent-return规则的一些问题。下面的代码将为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` });
});
});
}
答案 0 :(得分: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 …
。