所以我有这个代码:
http://pastebin.com/42aHz5fy(抱歉,我在StackOverflow编辑器中使用<pre>
标签失败了)
getStats函数中的console.log()返回一个对象,但在第二个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 :(得分: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);
});
答案 1 :(得分: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
});