Expected to return a value in arrow; function array-callback-return. Why?

77,821

Solution 1

Try Changing map(() => {}) to map(() => ())

{} - Creates a code block that expects an explicit return statement.
With () - implicit return takes place.

Solution 2

Your specific example is:

data.map(users => {
   console.log(users);
});

Where data is the following array:

[
  {id: 1, username: "Foo"},
  {id: 2, username: "Bar"},
]

data.map function (check Array.prototype.map specification) converts one array (data in your case) to a new array. The conversion (mapping) is defined by the argument of data.map, also called the callback function. In your case, the callback function is the arrow function users => {console.log(users);}. The callback function of data.map must return a value. By returning a value for each item of the array is how data.map defines the mapping.

But in your case the callback function does not return anything. Your intention is not to do any kind of mapping, but just to console.log. So in your case you can use data.forEach (Array.prototype.forEach) as you don't use data.map functionality.

NOTE: Also you should have singular (rather than plural) name for the parameter of the callback function: data.map(user => {console.log(user);}); as this parameter is set to the individual element from the old array.

Solution 3

If you don't need to mutate the array and just do the console.log() you can do data.forEach() instead. It shouldn't give you the warning. Map expects you to return a value after you've transformed the array.

fetch('/users')
        .then(res => res.json())
        .then(data => {
            data.forEach(users => {
                console.log(users);
            });
        });

Solution 4

From MDN:

The map() method creates a new array with the results of calling a provided function on every element in the calling array.

That means the map method has to be returned. So,you should change your code like this:

fetch('/users')
    .then(res => res.json())
    .then(data => {
        data.map(users => {
            return console.log(users);
        });
    });

or use forEach() instead of map()

Solution 5

Should be a implicit return use () in place for {}.

try this

fetch('/users')
    .then(res => res.json())
    .then(data => {
        data.map(users => (
            console.log(users);
        ));
    });
Share:
77,821
Chef1075
Author by

Chef1075

Wants Sushi 🍣

Updated on December 24, 2021

Comments

  • Chef1075
    Chef1075 over 2 years

    I'm having some issues understanding why I'm getting a compile warning on this piece of my react code

    fetch('/users')
            .then(res => res.json())
            .then(data => {
                data.map(users => {
                    console.log(users);
                });
            });
    

    The warning I'm getting is Expected to return a value in arrow function array-callback-return

    However I'm still get the json object values from my /users, and they are printed to the console individually. The object is:

        {
            id: 1,
            username: "Foo"
        }, {
            id: 2,
            username: "Bar"
        }
    

    Am I missing a return statement, or am I missing something with how map returns values after a .then()? I'm unclear on why the compile warning would appear at all.

  • trixn
    trixn over 6 years
    Returning the console log will fix the error but as console.log() does return undefined you would get an array of undefined values which will be quiet useless. forEach() is the best choice in this case.
  • trixn
    trixn over 6 years
    It expects you to return a value for an element of the array and that will be called for every element. So maybe "after you transformed the element" would make sense. Also map() does not mutate the array. It creates a new one.
  • user_che_ban
    user_che_ban over 3 years
    {} - Creates a code block that expects an explicit return statement. that hint solved my issue. i added return to the final value
  • Ondiek Elijah
    Ondiek Elijah about 3 years
    Works, changing the curly braces to brackets did it!
  • olisteadman
    olisteadman almost 3 years
    Worked for me thx
  • malibil
    malibil over 2 years
    yes, ı use react and i resolved my problem with this way.
  • revengeance
    revengeance over 2 years
    While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only answers can become invalid if the linked page changes. - From Review