【问题标题】:Function Returns undefined object [duplicate]函数返回未定义的对象[重复]
【发布时间】:2014-02-13 02:52:48
【问题描述】:

所以我有这个代码:
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);

【问题讨论】:

  • “为什么它返回 undefined?” 因为函数 getStats 没有返回任何东西。函数中没有return 语句。

标签: javascript node.js object


【解决方案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);
});

【讨论】:

  • 它给了我一个错误:img513.imageshack.us/img513/6739/g2a3.png我正在使用node.js
  • @LucasT.:错误对我来说非常明显:您没有定义参数callback。仔细检查您在此答案中是否有相同的代码。
  • 哦,对不起,我的错误。它解决了一切,谢谢!
【解决方案2】:

因为 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
});

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    相关资源
    最近更新 更多