2017-08-10 8 views
0

ネストされたRedisの文を使用している間、私はエラーを取得していますし、私はいくつかの例を挙げて取り組んできたといつでもIAMは、ノードのjs IAMなって、いくつかのエラーでネストされたRedisの文を使用して。 私は次のコードを持っている:私は出力に接続さなぜ私はRedisのために新しいです

、 のvalを取得しています

var redis= require("redis");           
client = redis.createClient();    
client.on('connect',function(err){ 
if(err) console.log("not able to connect"); 
console.log("connected");});      
client.RPUSH("pony","new"); 
client.RPUSH("pony","val");         
client.LINDEX("pony",-1,function(err,reply){ 
if(err) console.log("oops"); 
console.log(reply); 
client.LREM("pony",-1,reply,function(err,rep){ 
    if(err) console.log("error"); 
    else console.log(rep); 
});})               
client.quit(); 

を、 エラー

はここLINDEXからの返信は、文字列である "バル" と私はそれをLREMに渡します。

なぜネストされたclient.lremは、回答の値を取っていないのですか?

答えて

0

あなたのコードは大丈夫です。あなたのclient.LREM("pony",-1,reply,function(err,rep){ if(err) console.log(err); else console.log(rep); });

を実行する可能性があり、あなたがエラーを取得している

{ [AbortError: Stream connection ended and command aborted. It might have been processed.] code: 'NR_CLOSED', command: 'LREM', args: [ 'pony', -1, 'val' ] }

client.quit()

client.LINDEX("pony",-1,function(err,reply){ 
if(err) console.log("oops"); 
console.log("##" + reply); 

client.LREM()を実行するために多くの時間を必要とし、実行することのために右後に実行される前に、しかし、client.quit()実行されますjavascriptのイベントキューが空になった後(これはjavascriptの動作です)

だから私はあなたがシリアルコードを実行し、すべての操作は、Redisのクライアント接続を閉じ、完全に実行されている場合を確認する約束(「Q」など)またはasync.series()を使用することができます示唆しています。

それとも別の簡単なオプションは、Redisのクライアント接続を閉じないです。 client.lindex文の内部で、それがうまく働いた。私はclient.quitを()と呼ばれる:)

+0

おかげで、私はそれを考え出しました – nuy5

関連する問題