我是nodejs / javascript的新手并尝试从函数传递值。
下面是我的request.on函数(我需要获取favoriteStn值并在构建JSON数组时传递它)
response.on('end', function () {
str = JSON.parse(str);
var summariesJSON = str[0].summaries
var resToSend = [];
for(var i in summariesJSON) {
var item = summariesJSON[i];
var favoriteStn = findifFavorite (usernameFrmQuery,item.device_id,function(value){
favoriteStn = value;
});
resToSend.push({
"lat" : item.lat,
"lng" : item.ln,
"count" : item.count,
"status" : item.status,
"id" : item.id,
"name" : item.name,
"address" : item.address,
"favoriteStn" : favoriteStn,
"fav_count" : findFavCount
});
}
res.send(resToSend);
});
function findifFavorite (username,stationId,cb) {
var options = {
};
ddb.getItem(chgStationfavorite, username, String(stationId), options, function(err, getitemRes, cap) {
if (err) {
cb("Failure" + err);
} else if(typeof(getitemRes) != 'undefined'){
cb("Y");
}
else {
cb("N");
}
});
}
问题是我没有为favoriteStn创建任何东西,我知道它正在进入函数并提供值,因为我可以通过console.log看到它。
你可以帮助我如何使用回调并使其正常工作吗?
答案 0 :(得分:0)
你必须考虑node.js中的所有内容都是异步的。
在您的情况下findifFavorite
执行时间花费更多时间,并且该值不适用于数组。
这是您修复代码的方法,您必须在回调函数中移动resToSend
数组。
开始阅读有关承诺的更多信息 https://github.com/petkaantonov/bluebird 所以你不会陷入回调地狱。
var favoriteStn = findifFavorite (usernameFrmQuery,item.device_id,function(value){
favoriteStn = value;
resToSend.push({
"lat" : item.lat,
"lng" : item.ln,
"count" : item.count,
"status" : item.status,
"id" : item.id,
"name" : item.name,
"address" : item.address,
"favoriteStn" : favoriteStn,
"fav_count" : findFavCount
});
res.send(resToSend);
});