Error expected to return a value at the end of arrow function consistent return

Тоже решил не самым лаконичным способом, но возник вопрос по поводу ошибки - 2:25 error Expected to return a value at the end of arrow function consistent... [32785]

Евгений Трифонов

Тоже решил не самым лаконичным способом, но возник вопрос по поводу ошибки — 2:25 error Expected to return a value at the end of arrow function consistent-return
Требует возврат значения в конце строчной функции. Погуглил, но не совсем понял, что имеется в виду. Код-ревью


5


0

fessan

Евгений Трифонов, Добрый день. Вам следует заглянуть в решение учителя. Все таки нужно стремится к лучшему коду). А ругается потому что у функции нет явного возврата с return. Добавьте return result перед последней скобкой и проблема исчезнет.


0

Евгений Трифонов

fessan, Спасибо, теперь стало ясно)


0

Станислав Дзисяк

Евгений Трифонов, приветствую!

Данное правило говорит о том, что если в функции используется явный возврат, то все пути кода через функцию должны его также иметь. Или же функция не должна иметь возвратов вообще.

В данной ситуации, если бы функция получила параметр q < 0, то функция вернула бы undefined (значение возврата по умолчанию), так как цикл не выполнился бы ни разу, и не сработал бы ни один из операторов return.

С данным правилом можете ознакомиться на сайте eslint.org. Там есть описание правила, а также прилагаются примеры. Также на этом сайте вы сможете найти описания и других ошибок линтера.


0

fessan

То есть мой ответ не совсем верен. Эх. (


0

Евгений Трифонов

Станислав Дзисяк, Спасибо, теперь стало окончательно ясно)


0

Fixing ‘consistent-return’ linter issue with simple arrow function

As title, I have an arrow function with the error. How can I refactor it so the error goes away?

Expected to return a value at the end of arrow function consistent-return

This is my code:

// Disable default form submission when user hits enter.
const $facetInput = $('.facet-input');
const $submitButton = $('.facet-submit');

$facetInput.on('keydown', (event) => {
  if ((event.key === 'enter' || event.keyCode === 13) && event.target !== $submitButton) {
    event.preventDefault();
    return false;
  }
});

Thanks!

Advertisement

Answer

By always explicitly returning a value under all code branches:

$facetInput.on('keydown', (event) => {
  if ((event.key === 'enter' || event.keyCode === 13) && event.target !== $submitButton) {
    event.preventDefault();
    return false;
  }
  return <something else>; // false, true, 'whatever' - up to you
});

Assuming this is eslint (but really regardless of the linter), there is an implicit return undefined if your if (condition) does not evaluate to true.

One of the confusing aspects of JavaScript is that any function may or may not return a value at any point in time. When a function exits without any return statement executing, the function returns undefined. Similarly, calling return without specifying any value will cause the function to return undefined. Only when return is called with a value is there a change in the function’s return value.

7 People found this is helpful

все работает нормально, но у меня это предупреждение Expected to return a value at the end of arrow function array-callback-return, Я стараюсь использовать forEach вместо map, а потом <CommentItem /> даже не показывают. Как это исправить?

  return this.props.comments.map((comment) => {
  
      if (comment.hasComments === true) {
      
        return (
          <div key={comment.id}>
          
            <CommentItem className="MainComment"/>

              {this.props.comments.map(commentReply => {
              
                if (commentReply.replyTo === comment.id) { 
                  return (
                    <CommentItem className="SubComment"/>
                 ) // returnt
                } // if-statement
              }) // map-function
              } // map-function __begin
            
          </div> // comment.id
          
        ) // return

3 ответов


предупреждение указывает, что вы не возвращаете что-то в конце функции стрелки карты в каждом случае.

лучший подход к тому, что ты пытаешься сделать это с помощью .filter и .map, например:

this.props.comments
  .filter(commentReply => commentReply.replyTo === comment.id)
  .map((commentReply, idx) => <CommentItem key={idx} className="SubComment"/>);

A map() создает массив, поэтому return ожидается для всех путей кода (if / elses).

Если вы не хотите массив или возвращать данные, используйте forEach вместо.


проблема, кажется, в том, что вы не возвращаете что-то в том случае, если ваш первый if — case имеет значение false.

ошибка, которую вы получаете, гласит, что ваша функция стрелки (comment) => { не имеет оператора return. Хотя это когда ваш if — case является true, он ничего не возвращает, когда он false.

return this.props.comments.map((comment) => {
  if (comment.hasComments === true) {
    return (
      <div key={comment.id}>
        <CommentItem className="MainComment" />
        {this.props.comments.map(commentReply => {
          if (commentReply.replyTo === comment.id) { 
            return (
              <CommentItem className="SubComment"/>
            )
          }
        })
        }
      </div>
    )
  } else {
     //return something here.
  }
});

редактировать вы должны взглянуть на ответ Криса о том, как лучше реализовать то, что вы пытаетесь делать.


Понравилась статья? Поделить с друзьями:
  • Error expected primary expression before token перевод
  • Error expected declaration before token
  • Error expected class name before token
  • Error expected primary expression before token arduino
  • Error expected before token exit status 1 expected before token