res.json(data) 在 redis 客户端从服务器获取数据之前调用...我如何在发送 json 对象之前等待数据?
app.get('/api/player/:name', function(req, res) {
var name = req.params.name;
var data = {
"connected": 0,
"health": 0,
"armour": 0
};
readClient.get(name + '.connected', function(err, value) {
data.connected = value;
});
readClient.get(name + '.health', function(err, value) {
data.health = value;
});
readClient.get(name + '.armour', function(err, value) {
data.armour = value;
console.log(data);
});
console.log(data);
res.json(data);
});
最佳答案
嗯,redis 调用是异步的。这意味着每个查询调用都必须接收一个回调函数,一旦查询完成注入(inject)数据和错误,该回调函数就会被调用。为了在所有数据准备就绪时发送 res.json,您必须执行以下操作:
app.get('/api/player/:name', function(req, res) {
var name = req.params.name;
var data = {
"connected": 0,
"health": 0,
"armour": 0
};
var promises = [];
promises.push( new Promise( function(resolve,reject) {
readClient.get(name + '.connected', function(err, value) {
if(err) { reject(err); }
resolve(value);
});
} ) );
promises.push( new Promise( function(resolve,reject) {
readClient.get(name + '.health', function(err, value) {
if(err) { reject(err); }
resolve(value);
});
} ) );
promises.push( new Promise( function(resolve,reject) {
readClient.get(name + '.armour', function(err, value) {
if(err) { reject(err); }
resolve(value);
});
} ) );
Promise.all(promises).then( function(values) {
console.log(values);
data.connected = values[0];
data.health = values[1];
data.armour = values[2];
res.json(data);
} ).catch(handleError);
});
function handleError(err) {
res.status(501);
res.send({msg:err.message});
}
不过,我建议使用 await 和 Promises,但这是一个很好的起点。
希望对你有帮助
关于json - Node.js 在发送 json 对象之前等待 redis client.get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52332659/