我有一个我正在调用的导出函数应该返回一个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);
}
);
};
我觉得我正在错误地返回数据,而且我似乎找不到任何其他好的例子。有人可以帮忙吗?
答案 0 :(得分:1)
getDraftResults()
是异步的。这意味着它生成的结果会在稍后发生。因此,它无法像您尝试使用的那样直接从函数返回其结果。
目前还不清楚你想在这里做什么。在getDraftResults()
内部,您正在创建一个JSON响应,回复启动所有这些的Web请求。这本来就没问题,并且可以正常工作(除了缺少错误处理)。
但是,在你的app.get()
处理程序中,你有完全不同的代码似乎getDraftResults()
将返回一个值(它根本没有返回值),然后你将在以后使用返回值。
因此,如果您只是希望getDraftResults对原始Web请求进行JSON响应,那么它已经在执行此操作,您可以删除app.get()
处理程序中的其余内容。如果那不是你想要做的并且你想要使用getDraftResults()
处理程序内app.get()
的响应,那么你将不得不改变两个函数的设计,并可能将回调传递给{ {1}}因此回调可以提供异步响应,然后您可以继续该回调中的其余getDraftResults()
功能。
如果你正在尝试做后者,那么这里是一个脚手架(我不知道你想要完成什么,所以我不能在这里做得太详细):
app.get()