web-dev-qa-db-fra.com

ESLint avertissement ES6 règle de retour cohérent

Je reçois un avertissement ESLint:

devrait renvoyer une valeur à la fin de la fonction flèche (retour cohérent)

errors.details.forEach((error) => {
  const errorExists = find(errObj, (item) => {  // <== ESLint warning
    if (item && item.field === error.path && item.location === location) {
      item.messages.Push(error.message);
      item.types.Push(error.type);
      return item;
    }
  });
  if (!errorExists) {
    errObj.Push({
      field: error.path,
      location: error.location,
      messages: [error.message],
      types: [error.type]
    });
  }
});

Cependant, si j'insère un retour

  const errorExists = find(errObj, (item) => {    // <== ESLint warning
    if (item && item.field === error.path && item.location === location) {
      item.messages.Push(error.message);
      item.types.Push(error.type);
      return item;
    }
    return;   // <== inserted return
  });

Alors plus d'avertissement sur cette ligne, mais je reçois 2 avertissements sur le retour inséré ...

La fonction flèche attendait une valeur de retour (systématiquement-return) Instruction de retour inutile (pas de retour inutile) Je ne vois pas comment résoudre correctement ce problème ..

16
user762579

http://eslint.org/docs/rules/consistent-return dit:

Cette règle exige que les instructions de retour spécifient toujours ou jamais des valeurs.

Lorsque votre condition if n'est pas remplie, la fonction flèche se termine sans rencontrer une instruction de retour, ce qui viole cette règle. Votre deuxième version viole cette règle car votre deuxième retour ne spécifie pas de valeur, contrairement au premier retour. Le deuxième avertissement vous indique que votre déclaration de retour supplémentaire est redondante.

Pour rendre le linter heureux, vous devriez probablement penser à ce qu'il faut retourner correctement de la fonction flèche si la condition n'est pas remplie. Je ne sais pas exactement ce que fait votre fonction find, mais si elle se comporte comme Array.prototype.find, vous voudrez peut-être retourner false à la fin de la fonction flèche. Si vous devez renvoyer undefined dans ce cas, ce paragraphe de la même page s'applique:

Quand ne pas l'utiliser

Si vous souhaitez autoriser les fonctions à avoir un comportement de retour différent en fonction de la ramification du code, vous pouvez désactiver cette règle en toute sécurité.

EDIT: J'ai déjà écrit pour jeter un œil à l'option treatUndefinedAsUnspecified, mais il semble que l'un ou l'autre paramètre ne vous aidera pas si vous devez retourner undefined dans une seule des branches.

15
JayK

le retour est correctement inséré, mais sa valeur doit être donnée ...

return false;

est la valeur correcte

9
user762579