Node.js асинхронный стиль CoffeeScript и циклы - PullRequest
1 голос
/ 02 марта 2012

Я пробую свои силы в изучении node.js с использованием coffeescript, но у меня возникают проблемы с тем, чтобы обернуть голову вокруг потока.

Моя первая задача - проанализировать CSV-файл и добавить проанализированные записи в mongodb. Вот то, что я имею до сих пор:

https://gist.github.com/1953474

Я использовал простой счетчик var, который функция addRule увеличивает при вызове и уменьшает в конце обратного вызова, проверяя, завершился ли он последним, поэтому можно вызвать exit. Я думаю, что это правильная форма, но если есть более правильный путь, я открыт для предложений.

Реальная проблема, с которой я сталкиваюсь, заключается в том, что ничего не анализируется и не добавляется в базу данных. Сначала я понял, что не жду установления соединения, но теперь я в тупике. Мне интересно, если я только что пропустил некоторые детали относительно того, как я должен работать с мангустом ...

Идеи?

1 Ответ

0 голосов
/ 02 марта 2012

В вашем счетчике есть две ошибки.

Вы не вызываете exit, если количество записей равно нулю.

И ваше уменьшение после, а не раньше.n_out-- возвращает n_out, --n_out возвращает n_out - 1

Другая ваша ошибка - использование CoffeeScript, вы будете сожалеть об этом.

addRules = (records) ->
  n_out = 1
  next = () ->
    if --n_out is 0
      exit()
  next()
  addRule = (r) ->
    n_out++
    util.print n_out
    Rule.update {state: r.state}, r, {upsert: true}, (err) ->
      if err
        util.print r.state + ": " + err + "\n"  
      else 
        util.print "processed " + r.state + " rule\n"
      next()
  addRule(r) for r of records 
...