gpt4 book ai didi

node.js - 使用 node_redis 时如何访问传递给 hgetall 的 key ?

转载 作者:IT王子 更新时间:2023-10-29 06:04:09 24 4
gpt4 key购买 nike

我有一个 node.js (express) 应用程序,我正在使用 node_redis 从我的 redis 数据库中获取所有用户。

redis = require "redis"
client = redis.createClient()

client.smembers "users", (err, user_ids) ->
results = new Array()
for user_id in user_ids
client.hgetall user_id, (err, items) ->
results.push items
if user_ids.length is results.length
res.json results

这会产生以下结果:

[
{
"name": "user1",
"password": "secret"
},
{
"name": "user2",
"password": "secret"
}
]

现在我希望将 user_id 添加到用户结果中,这样我可以获得以下输出:

[
{
"user:1": {
"name": "user1",
"password": "secret"
}
},
{
"user:2": {
"name": "user2",
"password": "secret"
}
}
]

我遇到的问题是 client.hgetall() 是异步调用的,我不能简单地在 for 循环中访问 user_id。

最佳答案

需要在循环中引入一个函数,使用闭包来存储user_id。一种方法是使用 forEach 函数迭代数组。

这是 Javascript 中的示例:

var redis = require('redis')
var client = redis.createClient();

function fetch( callback ) {
var results = new Array();
client.smembers( "users", function(err,users) {
if ( users.length == 0 )
return callback( results );
users.forEach( function(id) {
client.hgetall(id, function(err,items) {
var obj = {};
obj[id] = items; # here id can be accessed since it is part of the closure
results.push(obj);
if ( results.length == users.length ) {
callback( results );
}
});
});
});
}

fetch( function(results) {
console.log(JSON.stringify(results));
});

输出是:

[ {"user:2":{"name":"user2","password":"secret2"}},
{"user:1":{"name":"user1","password":"secret"}} ]

关于node.js - 使用 node_redis 时如何访问传递给 hgetall 的 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12783683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com