0

スニペットは次のとおりです。

objects = [];
client.keys 'objects*', (err,keys) ->
for (i = 0; i < keys.length; i++){
  client.hgetall(keys[i], function(err, obj) {
    objects.push(obj);
    if (i === keys.length){
      response.writeHead(200, {'Content-Type': 'application/json'});
      console.log(JSON.stringify(objects));
      response.write(JSON.stringify(objects));
      response.end();
    }
  }
}

varオブジェクトは、node-redisを介してredisにクエリを実行することで入力するオブジェクトの配列であり、それぞれに6つのプロパティがあります。コンソールでは、私が期待するものを正確に取得します。ただし、クライアントでは、最後のオブジェクトのみを含む配列を受け取ります。それがクライアントの脱セラライザーであるかどうか疑問に思って、私はそれをFiddlerでキャプチャしましたが、それでも単一のオブジェクトを持つその配列です。

これが、console.logを介してコンソールに表示されるものです。

[{"prop1":"11","prop2":"12","prop3":"13","prop4":"14","prop5":"15","prop6":"16"},  {"prop1":"21","prop2":"22","prop3":"23","prop4":"24","prop5":"25","prop6":"26"},{"prop1":"31","prop2":"32","prop3":"33","prop4":"34","prop5":"35","prop6":"36"},{"prop1":"41","prop2":"42","prop3":"43","prop4":"44","prop5":"45","prop6":"46"},{"prop1":"51","prop2":"52","prop3":"53","prop4":"54","prop5":"55","prop6":"56"},{"prop1":"61","prop2":"62","prop3":"63","prop4":"64","prop5":"65","prop6":"66"}]

私は何か間違ったことをしているに違いない...

4

1 に答える 1

1

非同期コードが間違っています。行if(i === keys.length)は、client.hgetallがkeys.length回呼び出されたかどうかをチェックしており、呼び出しが完了したかどうかをチェックしていないため、常にtrueを返します。代わりにチェックする必要があります(objects.length === keys.length)– DeaDEnD

于 2013-03-12T22:50:38.393 に答える