【问题标题】:Array.push, array stays emptyArray.push,数组保持为空
【发布时间】:2013-03-06 05:49:44
【问题描述】:

我正在尝试从我的 redis 数据库中获取所有 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"

【问题讨论】:

  • 会不会是 hgetall 是异步执行的(这可以解释回调的使用)?
  • 谢谢,蒂洛。 HGETALL 是异步的,我现在正在使用 redis.multi() 来解决问题;)

标签: node.js coffeescript redis


【解决方案1】:

我认为你的代码有两个问题:

  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"            

【讨论】:

  • 要么你的缩进被破坏,要么你错过了回报
  • 哎呀!我在哪里错过退货?
  • if not err and logKeys isnt null
  • 对不起,我不明白。为什么会缺少退货?这个位置的回报应该怎么做?
  • 你的 if 这里基本上没用,因为你没有任何东西。实际上,coffee 会拒绝解析它,因为它不是一个帖子,如果(之前什么都没有)并且它没有阻塞
猜你喜欢
  • 2019-07-28
  • 2020-07-05
  • 2019-06-13
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 2020-11-18
相关资源
最近更新 更多