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の約束を使用していますが、約束を放棄してコールバックのみを使用すると、同じ結果が得られます。
私は何を間違っていますか?