ESLint consistent-return 和嵌套回调
ESLint consistent-return and nested callbacks
我在使用 ESLint 提供的 consistent-return 规则时遇到了一些问题。下面的代码将为 User.findOne
回调函数抛出 consistent-return
警告。据我所知,如果没有 findErr
并且有 existingUser
.
,我只能 运行 .remove
操作
避免这些嵌套回调的最佳做法是什么?我想通过 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?
承诺。
I would like to pass the consistent-return warning
那你最好不要用early-returns。相反,写
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 …
。
我在使用 ESLint 提供的 consistent-return 规则时遇到了一些问题。下面的代码将为 User.findOne
回调函数抛出 consistent-return
警告。据我所知,如果没有 findErr
并且有 existingUser
.
.remove
操作
避免这些嵌套回调的最佳做法是什么?我想通过 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?
承诺。
I would like to pass the consistent-return warning
那你最好不要用early-returns。相反,写
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 …
。