0
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,但如果我放弃承诺而只使用回调,我会得到相同的结果。

我究竟做错了什么?

4

1 回答 1

0

这不是我的代码的问题。这似乎与此问题有关,因为当我注释掉架构中的所有唯一索引时,它可以工作。这是 MongoDB 驱动程序中的一个(仍未解决的)错误

于 2014-07-05T05:00:47.603 回答