节点导出函数返回未定义

时间:2015-08-11 16:48:44

标签: json node.js

我有一个我正在调用的导出函数应该返回一个json数组的草稿结果。在app.js下面的路线中,当我在console.log draft_results时,我得到了未定义的

app.get('/draft-results', function(req, res) {

    var draft_results = fantasy.getDraftResults(req, res);

    console.log(util.inspect(draft_results, false, null));

    //looks in views folder by default
    res.render('draft-results', {
        draft_results: draft_results
    });

});

在我的另一个文件中,这是应该返回json数组的函数。如果我是console.log草案,那么数据就在那里。

exports.getDraftResults = function(req, res, cb) {
    oauth.get(
        "http://fantasysports.yahooapis.com/fantasy/v2/league/" + conf.LEAGUE_ID + "/draftresults?format=json",
        req.user.accessToken,
        req.user.tokenSecret,
        function(e, data, resp) {
            if (e) console.error(e);

            data = JSON.parse(data);

            var draft = data.fantasy_content.league[1].draft_results;

            res.json(draft);

        }
    );

};

我觉得我正在错误地返回数据,而且我似乎找不到任何其他好的例子。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

getDraftResults()是异步的。这意味着它生成的结果会在稍后发生。因此,它无法像您尝试使用的那样直接从函数返回其结果。

目前还不清楚你想在这里做什么。在getDraftResults()内部,您正在创建一个JSON响应,回复启动所有这些的Web请求。这本来就没问题,并且可以正常工作(除了缺少错误处理)。

但是,在你的app.get()处理程序中,你有完全不同的代码似乎getDraftResults()将返回一个值(它根本没有返回值),然后你将在以后使用返回值。

因此,如果您只是希望getDraftResults对原始Web请求进行JSON响应,那么它已经在执行此操作,您可以删除app.get()处理程序中的其余内容。如果那不是你想要做的并且你想要使用getDraftResults()处理程序内app.get()的响应,那么你将不得不改变两个函数的设计,并可能将回调传递给{ {1}}因此回调可以提供异步响应,然后您可以继续该回调中的其余getDraftResults()功能。

如果你正在尝试做后者,那么这里是一个脚手架(我不知道你想要完成什么,所以我不能在这里做得太详细):

app.get()