2013-06-29 4 views
0

Я делаю запрос на mongoDB, и я хотел бы увеличивать переменную для каждого объекта, который я нашел в моей базе данных.Как сохранить данные после извлечения мангуста?

Моя проблема заключается в том, что моя переменная TotalSize, кажется, не сохраняются данные, которые он получает, я не знаю, почему:/

Я полагал, что это была проблема закрытия в JS, но кто-то сказал мне, чтобы увидеть, если это не асинхронный признак объекта запроса, который вызывает мою проблему.

Я потерял:/

var totalSize = 0; 
for (var i = json[0].game.length - 1; i >= 0; i--) { 
//When I found a game, I would like to increment his size in totalSize 
    Game.findOne({ 
     'steamID': json[0].game[i].appID[0] 
    }, function (err, game) { 
     if (err) return handleError(err); 
     if (game) { 
      //everything is fine here totalSize is the right number 
      totalSize += game.size; 
     } 
    })// where he "forget" my var 
    //totalSize is still at 0 like I never incremented the variable 
    console.log(totalSize); 
} 

res.render('user', { 
       steamid: steamID, 
       steamid64: steamID64, 
       size: totalSize, 
       content: json 
      }); 

ответ

1

findOne является асинхронный, так console.log выполняется перед findOne закончена

var totalSize = 0; 
for (var i = json[0].game.length - 1; i >= 0; i--) { 
//When I found a game, I would like to increment his size in totalSize 
    Game.findOne({ 
     'steamID': json[0].game[i].appID[0] 
    }, function (err, game) { 
     if (err) return handleError(err); 
     if (game) { 
      //everything is fine here totalSize is the right number 
      totalSize += game.size; 
     } 
     console.log(totalSize); 
    }) 

} 

Делают это так:

function findTotalSize(callback){ 
    var totalSize = 0; 
    var gameLength = json[0].game.length; 
    for (var i = gameLength - 1; i >= 0; i--) { 
     Game.findOne({ 
      'steamID': json[0].game[i].appID[0] 
     }, function (err, game) { 
      if (err) return handleError(err); 
      if (game) { 
       totalSize += game.size; 
      } 
      if(--gameLength == 0) 
       callback(totalSize); 
     }) 
    } 
} 

//use it 
findTotalSize(function(totalSize){ 
    res.render('user', { 
      steamid: steamID, 
      steamid64: steamID64, 
      size: totalSize, 
      content: json 
     }); 
}); 
+0

Нету Мне нужен totalSize вне функции findOne и обновляется с помощью game.size. Вы только перенесли его внутрь, и это не то, что я хочу. – hyptos

+0

@hyptos см. Отредактированный ответ – karaxuna

+0

см. Мое редактирование Мне просто нужно обновить totalSize для моего res.render. Я не знаю, видите ли вы, что я пытаюсь сделать:/кстати спасибо за ваше время :) – hyptos