3

redis db からすべての hget 値を取得しようとしています。しかし、アレイのログは空のままです。よろしければ、ご検討いただけますでしょうか。ありがとう

getAllHMSets = (cb) ->
  client.keys "log:*", (err, logKeys) ->
    if not err and logKeys isnt null
      logs = new Array()
      i = 0
      while i < logKeys.length
        client.hgetall logKeys[i], (err, log) ->
          if not err and log isnt null
            logs.push log
        i++

      if logs.length is logKeys.length
        cb logs  if typeof cb is "function"
4

1 に答える 1

2

あなたのコードには2つの問題があると思います:

  1. もっと慣用的なCoffeeScriptで書くべきです

  2. hgetall への呼び出しでもコールバックを使用する必要があります。そうしないと、配列がいっぱいになることはありません。

getAllHMSets = (cb) ->
  client.keys "log:*", (err, logKeys) ->
    if not err and logKeys isnt null

      logs = []

      for value in logKeys
        client.hgetall logKeys[i], (err, log) ->
          if not err and log isnt null
            logs.push log
            if logs.length is logKeys.length
              cb logs  if typeof cb is "function"            
于 2013-03-18T11:33:28.303 に答える