Возврат JSON через node.js response.write имеет неожиданные результаты - PullRequest
0 голосов
/ 12 января 2012

Вот фрагмент:

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 objects - это массив объектов, которые я заполняю, запрашивая redis через node-redis, каждый из которых имеет 6 свойств.В консоли я получаю именно то, что ожидал.Однако в клиенте я получаю массив только с последним объектом.Интересно, был ли это десерализатор клиента, я запечатлел его в Fiddler, и он все еще тот же массив с одним объектом.1010 * Должно быть, я что-то не так делаю ...

1 Ответ

1 голос
/ 13 марта 2013

Ваш асинхронный код неверен.Строка if (i === keys.length) всегда будет возвращать true, потому что вы проверяете, был ли client.hgetall вызван keys.length раз, а не если вызовы были завершены.Вместо этого вы должны проверять (objects.length === keys.length) - DeaDEnD

...