2013-03-17 60 views
3

我試圖從我的redis數據庫中獲取所有hget值。但是陣列日誌保持空白。請你們看看它嗎?由於Array.push,陣列保持爲空

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" 
+2

難道hgetall是異步執行的(這可以解釋使用回調的)? – Thilo 2013-03-17 23:30:57

+0

謝謝,蒂洛。 HGETALL是異步的,我現在使用redis.multi()來解決這個問題;) – krnflake 2013-03-17 23:59:11

回答

2

我覺得有兩個問題與您的代碼:

  1. 你應該把它寫在更地道的CoffeeScript

  2. 您的來電hgetall eitherwise您的陣列也必須使用一個回調永遠不會被填滿。

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"    
+0

你的縮進被破壞或者你錯過了一個回報 – Ven 2013-03-18 11:35:41

+0

oops!我在哪裏錯過了回報? – robkuz 2013-03-18 11:37:21

+0

'如果不是錯誤和logKeys不爲空' – Ven 2013-03-18 14:38:52