- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我一直在深入研究 Redis 并开发一个使用 Redis 的小型 Web 应用程序,因为它只是数据存储(我知道这不是 Redis 的预期目的,但我受益于学习命令以及在 Node 上整体使用 Redis . 我正在使用 Node_Redis。
这是我想要完成的(全部在 redis 中):我正在尝试使用他们的电子邮件检索用户。
问题是:我有一个 Promise.all 调用,它接受所有电子邮件( key )并将每个映射到一个 HGET 命令。当 Promise.all 解析时,我希望它解析为一组用户对象,但它最终解析为一组 bool 值(即 [true, true, true])。
这是/users
的逻辑
router.get("/", (req, res) => {
client.lrange("emails", 0, 1, (err, reply) => {
if (err) return console.log(err);
if (reply) {
Promise.all(
reply.map(email => {
return client.hgetall(email, (err, reply) => {
if (err) return console.log(err);
console.log("reply for hgetall", reply); // this prints a user object correct, but Promise.all still resolves to boolean array :(
return reply;
});
})
)
.then(replies => {
// replies = [true, true, true ...]
res.send(replies);
})
.catch(e => console.log(e));
} else {
res.send([reply, "reply is null"]);
}
});
});
我实际上已经多次使用 Promise.all,当我记录来自 redis 的回复时,它也显示了正确的对象,所以我现在很困惑。如何让 Promise.all 解析为一组用户对象?
最佳答案
问题是 client.hgetall
没有返回 promise 。它是异步函数,您传递回调以获得结果。您应该 promise 此函数以在Promise.all
中使用它:
...
return new Promise((resolve, reject) => {
client.hgetall(email, (err, reply) => {
if (err) {
return reject(err);
}
resolve(reply);
});
});
您可以手动promisification(如上例所示),也可以使用Bluebird
或Q
库及其promisify
和 promisifyAll
方法。
关于javascript - 使用 Promise.all 时,Node_Redis HGET 解析为 bool 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46041876/
我正在寻找一个函数 foo :: Handle -> ByteString 这将为我提供缓冲区中的所有内容,如果缓冲区为空则阻塞,如果缓冲区关闭则返回“”。 我有一个可以调用的应用 Data.Byte
我有一些这样的代码: import redis redis_db = redis.Redis(host=redis_host_ip, port=redis_port, password=redis_a
我使用 hget 从 redis 获取数据。 data = ss.hget("users", "inmove"); 数据类型为str。 type(data): "{u'free_tickets': 2
有100-200个字段的redis hash。如果我需要取 2 或 3 个值,哪种方法最好? 第一种方法是调用 hgetall,但我得到了很多无用的数据。 第二种方式是调用 hget key1、hge
问题是调用 getMasterData 时从不打印“通过了最糟糕的障碍”:(。天知道我做错了什么。这才是我真正想要实现的目标。 我在这里做错了什么?请告诉我。任何帮助将不胜感激。 下面是我对node
我想在 node.js 中创建一个 hget 的同步命令。 我写了以下内容: var db = require("redis"); var dbclient = db.createClient();
我正在尝试在 Node 脚本的 ioredis 中使用 hget 和 hset,我查看了文档,但找不到如何操作,知道如何操作吗? 谢谢, 最佳答案 这已在评论中得到解答,但对于 future 的搜索引
我正在尝试使用 HSET 作为首选选项在 Redis 中为帖子插入评论,但出现错误。下面是代码: var commmentData ={ id : id, c
由于某种原因,我的 hget 没有找到或返回我在公共(public)方法中设置的散列。我不明白为什么。 这一切都在一个继承自 ApplicationController 的 Controller 中,
首先,我是 Redis 的新手,所以请耐心等待,因为我确信这是一个简单的解决方案。 我正在尝试从我的散列中增加一个值。这就是我设置 key 'hset user:likes 2 10' 的方式,所以第
背景 我刚刚学习 Node js,遇到了一种情况,我需要对我的 Redis 数据库进行最多两次连续调用,具体取决于第一个查询的结果。 我现在的代码可以工作..但它非常丑陋。我这样写是因为我不擅长异步“
getRedisTemplate().executePipelined( new RedisCallback() { @Override public Obje
我正在尝试在 hget block 内的 node.js 中执行 hdel 命令。这是代码: client.hget(requests[i], "client", function(err, clie
我在 Redis Hash 中插入了一些用 MessagePack 打包的二进制数据。 我检查了数据是由redis控制台“monitor”插入的。 这里的问题是我无法使用 HGETALL、HKEYS
我想从nodeJs服务器获取redis服务器中的hash数据 我在 ruby 中有这个脚本 $redis.hset("token:test", 'user_id', 12) 如何在 NodeJs 服务
我找不到使用 Redis 对 HGET 和 HSET(哈希表命令)进行基准测试的示例。任何示例或资源都会对此有所帮助。 最佳答案 我刚刚意识到 redis-benchmark 命令不会对 hSet 和
我想用“hget”命令汇总每月的关键值。 测试集) hmset SiteID:TotalCnt 20180101 10 20180102 2 20180103 5 20180120 10 201801
我一直在深入研究 Redis 并开发一个使用 Redis 的小型 Web 应用程序,因为它只是数据存储(我知道这不是 Redis 的预期目的,但我受益于学习命令以及在 Node 上整体使用 Redis
for (i=0 ; i < pri.state.totalConversations; i++) { redisclient.lindex("conversationsIDL
在 redis 中,我有一个散列,我想首先在其中获取然后设置一个值。我认为我可以使用流水线来通过缩小往返行程来加速整个操作,如下所示: my_pipeline = redis.Redis(connec
我是一名优秀的程序员,十分优秀!