与Mongoose连接时的竞争条件

时间:2014-07-05 04:49:39

标签: node.js mongodb coffeescript mongoose bluebird

connect = (uri) ->
  new Promise (resolve, reject) ->
    db = mongoose.connection
    db.on "error", reject
    db.on "open", resolve
    mongoose.connect uri

connect(MONGO_URI[NODE_ENV]).then ->
  console.log "Connected to #{NODE_ENV}"
  MyModel.find().exec().then (models) ->
    console.log models.length

这导致竞争条件,其中返回的文档数是随机的并且短于集合中的完整数字。但是,如果我将find包裹在延迟(例如3秒)中,我将获得所有文档。但我的印象是,如果我等待"打开"我就不会遇到这样的竞争状态。事件。我使用Bluebird的承诺,fwiw,但如果我放弃承诺并使用回调,我会得到相同的结果。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这对我的代码来说不是问题。这似乎与this issue有关,因为当我在架构中注释掉所有唯一索引时,它会起作用。这是MongoDB驱动程序中的(仍未解析的)bug