2013-07-09 4 views
1

Я пытаюсь прочитать файл с (приблизительно 50 000 строк) и сохранить каждую строку после разбора в mongodb. Функция сохранения Mongodb является асинхронной. Для итерации через файл я использую узел-ленивый модуль.Узел lazy и async function in forEach

Что я получаю то, что только часть записей, сохраненных в MongoDB (за исключением обратного вызова с именем не для всех функций)

var stream = fs.createReadStream(inputFile) 

new lazy(stream) 
    .lines 
    .map(String) 
    .forEach(function(line){ 
     db[collection].save(parseLine(line), function(err){ 

      if (err){ 
       console.log(err) 
      } else { 
       count++; 
      } 
     }) 
     } 

) 

Так что нет ошибок, но рассчитывать < фактические записи (строки) рассчитывать;

Так что я задаюсь вопросом, как наилучшим образом решить проблему.

UPD:

Я решил проблему с помощью syncronios функции синтаксического анализа в Foreach, а затем, когда файл полностью читать, я сохранил данные в MongoDB с async.mapSeries.

Но я все еще удивляюсь, можно ли обрабатывать async с узлом-ленивым, я не нашел его в документах, возможно, это просто невозможно.

+0

Как вы убедились, что это только половина записей были сохранены? Вы также можете проверить, что forEach запускает требуемое время? – moka

+0

Я проверил коллекцию монгодб (в дБ). forEach запускается требуемое количество раз. Смотрите мой UPD. – WHITECOLOR

+0

Возможно, вы слишком быстро выполняете операции записи. Google молчал об этом. Но есть вероятность, что существует предел количества записей, которые вы пытаетесь выполнить за слишком короткий промежуток времени (в вашем случае это 50k пишет). – moka

ответ