调用自定义Redis命令/模块后,无法触发IORedis或(node_redis)回调

时间:2019-02-04 21:53:32

标签: node.js websocket redis node-redis ioredis

在nodejs应用程序的websocket消息事件中使用redis客户端(ioredis或node_redis)时,不会立即触发任何命令的回调。 (该操作确实在redis服务器上进行)

奇怪的是,第一个命令的回调将在我发送第二条消息后触发,第二个回调将在我发送第三条消息后触发。

wss.on('connection', (socket, request) => {

     socket.on('message', (data) => {

      console.log("will send test command")
      this.pubClient.hset("test10", "f1","v1", (err,value) => {
          //callback not firing first time
          console.log("test command reply received")
       })

    })

}

即使在应用程序的其他部分中,甚至在直接如下所示的on连接中时,redis命令仍可以按预期工作。

wss.on('connection', (socket, request) => {

    console.log("will send test command")
    this.pubClient.hset("test10", "f1","v1", (err,value) => {
        //callback fires
        console.log("test command reply received")
    })

    socket.on('message', (data) => {})
}

更新:

我全都错了。怪异的回调行为的原因是我的自定义Redis模块之一未返回答复的结果。 这似乎导致此调用后的所有回调似乎都有些单步延迟。

1 个答案:

答案 0 :(得分:0)

我全都错了。怪异的回调行为的原因是我的自定义Redis模块之一未返回答复的结果。这似乎导致此调用后的所有回调似乎都有些单步延迟。