這是我在節點第一次嘗試......現在的異步模塊。我很難同步調用我的redis數據庫。
目標 最後,我需要發生的是,當用戶調用我的REST API的GET方法,我想回到JSON對象,看起來像這樣:
[ { '10.123': '1111111111' },
{ '10.126': '2222222222' },
{ '10.125': '3333333333' },
{ '10.222': '4444444444' },
{ '10.131.90': '5555555555' },
{ '10.18': '6666666666' },
{ '10.19': '7777777777' },
{ '10.44': '8888888888' } ]
以上你看到的是關鍵在主GET方法中使用SCAN命令查詢。然後通過Redis的SCAN,我掉頭就跑的「HGETGALL」命令找出你看到的值以上
問題
返回每個按鍵雖然queryhgetall功能正常被調用一次每在主GET方法中返回的鍵...返回此方法中的數據爲空。這裏是我的代碼:
代碼
25 //async test start ====================================================================================
26 var async = require('async');
27
28 var queryhgetall = function (redis_key, doneCallBack) {
29 var tempObject = {};
30 redis.hgetall(redis_key, function (err, data) {
31 if (err) {
32 console.log("hgetall method fails: " + err);
33 }
34 if (data) {
35 var key = redis_key.split(":");
36 tempObject[key[1]]=data.callerid;
37 console.log(tempObject);
38 }
39 });
40 return doneCallBack(null,tempObject);
41 };
42
43 router.get('/', function (req, res, next) {
44 redis.send_command("SCAN", [0, "MATCH", "emergency:*"], function (err, reply) {
45 if (reply) {
46 var retdata = [];
47 async.map(reply[1], queryhgetall, function (err, results) {
48 console.log("finished");
49 console.log("results start");
50 console.log(results);
51 console.log("results stop");
52 });
53 }
54 });
55 });
56
57 //async test finish =====================================================================================================
代碼輸出
下面是我在控制檯輸出中看到:
GET /emergency/ - - ms - -
finished
results start
[ {}, {}, {}, {}, {}, {}, {}, {} ]
results stop
{ '10.123': '1111111111' }
{ '10.126': '2222222222' }
{ '10.125': '3333333333' }
{ '10.222': '4444444444' }
{ '10.131.90': '5555555555' }
{ '10.18': '6666666666' }
{ '10.19': '7777777777' }
{ '10.44': '8888888888' }
正如你可以從輸出中看到,第37行的console.log命令證明我已正確查詢每個k的callerid值但是我將這些數據返回給GET方法的方式可能不正確,因爲一切都是空的。
你能告訴我我錯過了什麼嗎?我試圖按照這裏的例子: http://javascriptplayground.com/blog/2013/06/think-async/
大聲笑我只是打入.. –
謝謝傑森。是的,我認爲你只是在我做之後發佈......或者非常接近它。 – Happydevdays