gpt4 book ai didi

node.js - redis hget 在代码片段中返回 null 但在 redis-cli 中有效

转载 作者:可可西里 更新时间:2023-11-01 11:13:58 24 4
gpt4 key购买 nike

for (i=0 ; i < pri.state.totalConversations; i++) {
redisclient.lindex("conversationsIDList",i, function(err,reply) {
convID = reply;
console.log("ConvID: " + "i: " + i + " "+ convID);
});
if(convID == pri.state.lastUpdatedConversationID)
break;
redisclient.hget("conversations", convID, function(err,reply) {
console.log("ConvID hget: "+ convID + " "+ reply);
data = JSON.parse(reply);
console.log("data: " +data);

});

上面是我的代码片段。 redis-cli hget 命令返回正确的答案,确认我使用正确的键和字段/值正确设置了哈希。然而,上面的代码片段为 hget 返回“null”,(convID 具有正确的值,它是 hget 的字段)——我不明白为什么——

最佳答案

在您的 redisclient.lindex 回调返回之前,不会设置

convID。在您的 for 循环早已退出之前,这不会发生(因为 Node 的事件循环甚至在您退出循环之前不会运行)。您正在向 redisclient 发出一大堆异步请求,而不是等待它们中的任何一个返回。

我有点难以准确说出您想做什么,但您可能想查看像 Async 这样的控制流库。

可以定义一个 bool 标志变量(作用域为您的模块或启动循环的任何函数),该变量将由您的第一个成功回调设置并告诉后续回调忽略它们的结果。但我只是猜测。主要问题是您试图在异步环境中使用同步控制流。

关于node.js - redis hget 在代码片段中返回 null 但在 redis-cli 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10967458/

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