我是nodejs的新手,也許沒有事件系統應該如何工作。 找不到錯誤。請指教。 我需要一個簡單的任務 - 檢查一個標籤,如果它不存在,請設置新標籤的關鍵字和信息。 問題是 - 然後我第一次運行腳本,它總是返回'鍵不存在'。檢查redisdb鑰匙 - 它創造了許多標籤 這裏是我的代碼nodejs,redis。檢查密鑰是否存在,如果不存在則創建新的
for (x = 0; x < rows.length; x++) {
if (rows[x].term_taxonomy_id != 1) {
var taxonomy = findOne(rterms, rows[x].term_taxonomy_id);
rc.exists('tag:' + taxonomy.name, function (err, rexists) {
if (rexists == false) {
rc.incr('tags:count', function (err, id) {
console.log(taxonomy.name+' not exists. result ' + rexists);
rc.set('tag:' + taxonomy.name,id);
rc.hmset('tag:' + id,
'id', id,
'title',taxonomy.name,
'url', taxonomy.slug
);
});//incr
}else{
console.log(taxonomy.name+' exists!'+rexists);
};
});//exists
};//ifrows
});
這裏是另外一個例子
var tags = [
"apple",
"tiger",
"mouse",
"apple",
"apple",
"apple",
"tiger",
"mouse",
"mouse",
];
var count =0;
Object.keys(tags).forEach (function (tag) {
rc.get("tag:"+tags[tag],function(err,rr){
console.log("get tag "+tags[tag]+" result code "+rr);
if (rr == null) {
rc.set("tag:"+tags[tag],"info",function(err,rr){
count++;
console.log('set tag '+tags[tag]+' '+rr+' objects count '+count);
});
};
});
})
輸出:
get tag apple result code null
get tag tiger result code null
get tag mouse result code null
get tag apple result code null
get tag apple result code null
get tag apple result code null
get tag tiger result code null
get tag mouse result code null
get tag mouse result code null
set tag apple OK objects count 1
set tag tiger OK objects count 2
set tag mouse OK objects count 3
set tag apple OK objects count 4
set tag apple OK objects count 5
set tag apple OK objects count 6
set tag tiger OK objects count 7
set tag mouse OK objects count 8
set tag mouse OK objects count 9
貌似的NodeJS執行所有「得到'命令,並且只能在'set'命令之後。所以......我明白,這都是因爲異步操作。但如何使它工作?
謝謝。我確定程序執行流程中的問題。我做了另一個測試,並得到同樣的問題。 –
在我之前的回覆中添加了一個示例。 –
謝謝你這個偉大的例子。經過多年的線性編程後,想到異步是很困難的。 –