【发布时间】:2015-02-14 13:30:15
【问题描述】:
我是 Node 和 Express 的新手,在从一个函数获取数据以作为 var 传递给另一个函数时遇到了麻烦。我想这是因为我没有正确处理回调和异步的东西,但希望能指导一下。
希望代码应该是解释性的。我正在尝试从 URL 检索一些 JSON 数据,并将其传递给 router.get 函数的 render() 方法。但是,不会发送任何内容(“未定义”)。但是,当我单独运行 getData() 函数时,它会返回正确的数据,如上所述,我认为这是因为我没有正确处理异步内容。
function getData(cid){
var request = require("request");
var cid ='XXXXXX' // hard code temp
var baseUrl = "someurl.com"
var apiKey = "XXXXXX"
var cUrl = baseUrl+cid+'?api_key='+apiKey
request({
url: cUrl,
json: true
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
console.log(body._embedded.assets); //Print the json response
return body._embedded.assets
}
});
}
/* GET home page. */
router.get('/', function(req, res) {
var LiveCards = getData()
var cID = (req.query.cID
? req.query.cID
: '14d115ff-1db7-4a6f-8648-ea64bc1a6597')
var limit = Number(req.query.limit)
res.render('index', {
title: 'Cards',
cards: LiveCards.slice(0,limit), <--- returning undefined at the moment
limit: limit,
activateSharetools: activateSharetools,
cID: cID,
cardsHeader: req.query.cardsHeader,
});
});
任何指导表示赞赏。
【问题讨论】:
-
getData() 没有返回; LiveCard 将是
undefined。 -
嗯。好的。我正在尝试
return body._embedded.assets。那不会返回数据吗? -
不,它不会返回数据。您的
get_data函数中没有任何return语句。单独运行函数时,只看到console.log,看不到返回值。
标签: javascript node.js asynchronous express