javascript - ESLint 一致返回和嵌套回调

标签 javascript node.js ecmascript-6 lint eslint

我在 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/

相关文章:

javascript - 传递 Node 模块的上下文

javascript - "Object Expected"中断 onClick 事件 (JavaScript)

javascript - jQuery 打字功能

node.js - 如何修改 Mongoose 查询的输出?

重复值的 Javascript findIndex

javascript - 我们可以在 javascript 中执行 orders.stream().mapToInt(Order::getQuantity).sum()) 吗?

javascript - 验证服务对象在 angularjs 中刷新时丢失页面

javascript - 在函数参数中强制执行对象结构

javascript - arguments 属性可以通过 this.some_function.arguments 访问吗?其实我无法解释?

node.js - Node JS/如何减慢 forEach 循环?