代码之家  ›  专栏  ›  技术社区  ›  germainelol

ESLint一致返回和嵌套回调

  •  0
  • germainelol  · 技术社区  · 8 年前

    我有一些问题 consistent-return ESLint提供的规则。下面的代码将抛出 consistent-return 警告 User.findOne .remove 行动,如果没有 findErr 如果有 existingUser .

    避免这些嵌套回调的最佳实践是什么?我想通过 一致收益 这是一个警告,但我们还没有在网上看到任何解决方案。

    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 回复  |  直到 8 年前
        1
  •  1
  •   Bergi    8 年前

    避免这些嵌套回调的最佳实践是什么?

    我想通过一致返回警告

    那么你最好不要使用早期回报。相反,写

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