web-dev-qa-db-fra.com

Map () en javascript est-il synchrone?

La fonction est:

[1,2,3].map( function (item)
{
  console.log(item);
  //return 'something';
});

Mon comportement attendu obtient seulement 1 en sortie, sauf si je décommente le

//return 'something'

Mais j'ai vraiment

1
2
3

Qu'est-ce que je fais mal ?

MISE À JOUR:

je teste cela avec nodejs.

je ne comprends vraiment pas.

var async = require("async");

[1,2,3].map( function (item)
{
      console.log(item);
      //return 'something';
}); 
async.map([1,2,3], function (item,callback)
    {
        console.log(item);
        //callback(null,true)
    }, function (err,result)
        {
            console.log(result);
        }
);

Les deux retournent le même

1
2
3

Et je voudrais vraiment attendre jusqu'à ce que j'obtienne un retour ou un rappel jusqu'à ce que l'élément suivant soit exécuté.

RÉSOLU

async.mapSeries([1,2,3], function (item,callback)
    {
        console.log(item);
        //callback(null,true)
    }, function (err,result)
        {
            console.log(result);
        }
);

est la façon de le faire.

15
user3815910

Oui, la carte est synchrone.
C'est une fonction d'ordre supérieur, qui prend une nouvelle fonction et l'applique au tableau donné.

Certaines personnes pensent que parce qu'elles donnent une fonction en tant que paramètre à map alors elle "devrait" agir comme une fonction de rappel d'événement, mais ce n'est vraiment pas le cas. La fonction map applique simplement le paramètre de fonction au tableau et seulement après sa fin, elle continue l'exécution pour le code résultant après le bloc de carte.

Quant à votre "comportement attendu" - il ne fonctionne tout simplement pas comme vous le pensez;)

42
funerr

"La méthode map () crée un nouveau tableau avec les résultats de l'appel d'une fonction fournie sur chaque élément de ce tableau."

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Le rappel est appelé pour chaque élément, votre logique est exécutée et la valeur de retour est définie comme un élément dans le nouveau tableau.

0
Or Barmatz