Используя node.js, я подключаюсь к моей базе данных redis и возвращаю значения в массив. Однако, чтобы вернуть значения, я должен использовать функцию обратного вызова, чтобы вывести их из области видимости. Я видел много примеров на SO функций обратного вызова в действии, и мои работы работают так же, как и все остальные, которые я видел, однако, когда я вызываю функцию как опцию в res.render
, она пытается вернуть родительскую функцию, а не обратный вызов. Как вернуть значение функции обратного вызова в параметр players:
?Возвращаемое значение обратного вызова Javascript
Родитель Функция
function openPlayers(callback) {
var players = [];
db.hgetall("players", function(err, objs) {
// Objects of Response
for (var k in objs) {
// Items are the individual key-value object
var newPlayer = {};
var items = JSON.parse(objs[k]);
for (var x in items) {
// x is the key for each object
newPlayer[x] = items[x];
}
players.push(newPlayer);
}
callback(players);
});
}
Расположение Callback функции
exports.newPlayer = function(req, res) {
res.render('newPlayer', {
title: 'New Player',
players: (openPlayers(function(ps) { //callback function
return(ps);
}))
});
};
Возврат из асинхронного обратного вызова бесполезен. Вы должны инвертировать логику и вызвать res.render из своего обратного вызова. – bfavaretto