Fonction Renvoie un object non défini

J’ai donc ce code:
http://pastebin.com/42aHz5fy (désolé, je n’ai pas réussi à utiliser

 balises 
 dans l'éditeur StackOverflow) 

La fonction console.log () dans getStats renvoie un object, mais dans le deuxième console.log () (en dehors de la fonction, après l'avoir appelée), elle renvoie "non défini".
Et voici ma console:

http://soffr.miximages.com/object/aU465.png

Pourquoi revient-il indéfini?

 var getStats = function (){ fs.readFile('Documents/GitHub/kag-gather-irc-bot/stats.json', 'utf8', function (err,data) { if (err) { return console.log(err); } everyStats = JSON.parse(data); console.log(everyStats); return everyStats; }); } STATS = getStats(); console.log(STATS); 

Comme la fonction getStats ne renvoie rien, seule la fonction qui est un argument de fs.readFile est renvoyée.

Ici, j’ai fait un argument de rappel, de sorte que vous puissiez faire ce dont vous avez besoin avec everyStats dans une fonction de rappel.

 var getStats = function (callback){ fs.readFile('Documents/GitHub/kag-gather-irc-bot/stats.json', 'utf8', function (err,data) { if (err) { return console.log(err); } everyStats = JSON.parse(data); console.log(everyStats); callback(everyStats); }); } getStats(function(stats) { // do what you want with stats }); 

Vous ne pouvez pas renvoyer une valeur d’une méthode asynchrone comme celle-ci … toutes les actions effectuées sur une valeur renvoyée par un appel asynchrone doivent être effectuées dans le rappel.

La solution consiste donc à utiliser un rappel qui sera appelé une fois l’opération asynchrone terminée et la valeur souhaitée sera transmise au rappel en tant qu’argument.

 var getStats = function (callback) { fs.readFile('Documents/GitHub/kag-gather-irc-bot/stats.json', 'utf8', function (err, data) { if (err) { return console.log(err); } everyStats = JSON.parse(data); console.log(everyStats); callback(everyStats); }); } getStats(function (STATS) { console.log(STATS); });