我在 consistent-return 方面遇到一些问题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` });
});
});
}
最佳答案
What would be the best practice for avoiding these nested callbacks?
promise 。
I would like to pass the consistent-return warning
那么你最好不要使用提前返回。相反,写
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 ...
。
关于javascript - ESLint 一致返回和嵌套回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40492376/