2014-02-13 196 views
0

所以我有这样的代码:
http://pastebin.com/42aHz5fy(对不起,我没在使用的StackOverflow编辑<pre>标签))函数返回未定义的对象

的执行console.log(内getStats函数返回一个对象,但在第二console.log()(在函数之外,在调用它之后),它返回“undefined”。
这是我的控制台:

http://i.stack.imgur.com/aU465.png

为什么会返回undefined?

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); 
+0

*“为什么会返回undefined?” *因为函数'getStats'不返回任何东西。函数中没有'return'语句。 –

回答

0

因为getStats函数没有返回任何东西,所以只有函数是fs.readFile的参数返回。

这里我做了一个回调参数,这样你就可以用回调函数内的everyStats完成你所需要的操作。

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 
}); 
1

您不能从异步方法那样返回值......所有对由异步调用返回的值所做的操作都必须在回调中完成。

因此,解决办法是使用一个回调,一旦异步操作完成,这将被调用,而所需的值将被传递给回调作为参数

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); 
}); 
+0

它给了我一个错误: http://img513.imageshack.us/img513/6739/g2a3.png 我使用node.js –

+0

@LucasT .:这个错误对我来说很明显:你没有定义参数'callback'。仔细检查你的代码是否在这个答案中。 –

+0

哦,对不起,我的错误。它修复了一切,谢谢! –