2016-02-21 84 views
0

我希望在node.js中創建hget的同步命令。Node.js&Redis/hget同步

我寫了下面:

var db = require("redis"); 
var dbclient = db.createClient(); 
var res1 = dbclient.hget("all_records", "/" + full_path) 
if (res1 != undefined){ 
    objStatus.status = "TRUE" 
} else { 
    objStatus.status = "FALSE" 
} 

的問題是,在res1,我總是得到true,而我設置編號,這個領域:

dbclient.hset("all_records", key, size); // size is number 

它還如果該鍵返回true不存在。

如何執行此命令?

編輯(這裏是完整的代碼,爲什麼我用電話同步):

for (var attr in paths) { 
     var full_path = "/0" + attr 
     var objStatus = new Object(); 
     var res1 = dbclient.hget("all_records", "/" + full_path) 
     if (res1 != undefined){ 
      objStatus.status = "TRUE" 
     } else { 
      objStatus.status = "FALSE" 
     } 
    } 
    arrayResult.push(objStatus); 
    } 
    return arrayResult; 

回答

1

這部分是有問題的;

var res1 = dbclient.hget("all_records", "/" + full_path) 

調用hget沒有返回值,它調用回一個給定的回調(你略)當值已被提取;

dbclient.hget("all_records", "/" + full_path, function(err, res) { 
    console.log(res); 
}); 

...將打印您的密鑰的值。

+0

但這是異步調用。在完整的代碼中,我遍歷所有記錄,然後將結果返回給客戶端。如果我使用你的建議,那麼我會返回一個空數組 - 因爲它不會等待所有的hget完成。 – MiddleWare

+0

我編輯問題。用你的建議,'arrayResult'將返回空。 – MiddleWare

+0

@MiddleWare這不是我的建議,這是Redis API的工作方式。您很可能必須使用回調使您的函數異步,或承諾能夠以直接方式將填充數組傳遞給調用代碼。 –