2013-07-03 30 views
1

我試圖以編程方式從Node.js中的Redis數據庫檢索值,使用'for'循環遍歷GET請求。我正在使用'redis'節點模塊。我可以使用console.log將這些請求的值打印到服務器,但是,我無法將這些值中的每一個都推送到全局數組中,以便在另一個node.js模塊中使用。我想知道這是否是由於Redis腳本的'全局變量保護'方面。我也想知道這裏是否有解決方法。如何使用Node.js和Redis爲for循環指定全局變量?

redis的-CLI:

redis 127.0.0.1:6379> SET a "1" 
OK 
redis 127.0.0.1:6379> SET b "2" 
OK 
redis 127.0.0.1:6379> SET c "3" 
OK 

的node.js:

var keys = ['a', 'b', 'c']; 
var vals = []; 
for(i=0; i<3; i++) { 
    client.get(keys[i], function(err, reply) { 
     console.log(reply); 
     vals.push(reply); 
    }); 
} 
console.log(vals); 

我想爲瓦爾斯陣列輸出與,b和c相關聯的值或... 1 ,2和3。同樣,意圖是在另一個節點模塊中使用這些值。

這是一個與全局變量保護相關的問題嗎?任何明顯的選擇?肯定覺得我失去了一些明顯的東西。

回答

0

client.getasync功能。 reply's正在按預期推到vals,但不是立即。在不久的將來,他們將被推到vals。因此,當您嘗試同步記錄vals時,您只會得到empty數組。

隨着async.js,你可以做這樣的事情:

var vals; 
var keys = ['a', 'b', 'c']; 
var async = require('async'); 
async.map(keys, client.get, function(err, results) { 
    vals = results; 
    console.log(vals);//will print what you wanted. 
}); 

但是,不管怎樣,你不能使其全球市場份額vals與其他文件。 我建議你寫asynchronous吸氣功能vals &使其他文件來調用函數來得到vals

+0

這很有道理。因此,如果我在同一個節點服務器中使用vals數組和該'later'節點模塊,那麼它應該全部正確地存儲在該數組變量中? – Peakbagger

+0

@Peakbagger:是的。 – 2013-07-03 19:42:53