Node.js CoffeeScript异步样式和循环

时间:2012-03-01 22:16:55

标签: node.js asynchronous coffeescript

我正在尝试使用coffeescript学习node.js,但我无法绕过流程。

我的第一个任务是解析csv文件并将解析后的记录添加到mongodb。以下是我到目前为止的情况:

https://gist.github.com/1953474

我使用了一个简单的计数器var,addRule函数在调用时递增,在回调结束时递减,检查它是否是最后一个完成,因此可以调用exit。我认为这是正确的形式,但如果有更正确的方式,我愿意接受建议。

我遇到的真正问题是没有任何内容被解析或添加到数据库中。最初我意识到我不是在等待建立联系,但现在我很难过。我想知道我是否只是错过了一些关于我应该如何使用猫鼬的细节......

想法?

1 个答案:

答案 0 :(得分:0)

你的计数器特别有两个错误。

如果记录数为零,则不调用退出。

而你之前的减量。 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