Pourquoi request.on () ne fonctionne-t-il pas dans Node.js?

J’essaie d’obtenir des données d’un service tiers à l’aide du module de demande de nœud et de les renvoyer sous forme de chaîne à partir d’une fonction. Ma perception était que request() renvoie un stream lisible puisque vous pouvez faire request(...).pipe(writeableStream) ce qui – je pensais – implique que je peux faire

 function getData(){ var ssortingng; request('someurl') .on('data', function(data){ ssortingng += data; }) .on('end', function(){ return ssortingng; }); } 

mais cela ne fonctionne pas vraiment. Je pense avoir une idée fausse de la façon dont fonctionne réellement request () ou les stream de nœuds. Quelqu’un peut-il éclaircir ma confusion ici?

Cela fonctionne exactement comme vous l’avez expliqué. Peut-être que le problème que vous rencontrez est dû à la nature asynchrone de node.js. Je suis sûr que vous appelez votre getData() de manière synchrone. Essayez ceci et voyez si votre request appel ne renvoie rien:

 request('someurl') .on('data', function(data){ console.log(data.toSsortingng()); .on('end', function(){ console.log("This is the end..."); }); 

Jetez un coup d’œil à cet article ici . Ce n’est pas court, mais il explique comment écrire votre code pour faire face à ce genre de situation.

Ce que je comprends, c’est que vous voulez accéder à une ssortingng plus tard et que vous pensiez que la request renverrait une chaîne complétée. Si c’est le cas, vous ne pouvez pas le faire de manière synchrone, vous devez mettre votre code pour traiter la ssortingng complétée dans le gestionnaire d’événements end comme ceci:

 function getData(){ var ssortingng; request('someurl') .on('data', function(data){ ssortingng += data; }) .on('end', function(){ processSsortingng(ssortingng); }); } getData();