mongoose人口 – callback与执行

在Node.js / Mongoose / Mongo上

SomeModel.findOne({_id: id}, callback).populate('ref') 

相当于

 SomeModel.findOne({_id: id}).populate('ref').exec(callback) 

“ref”是单个文档(不是数组)。

问题在于使用第一种语法时,“callback”被调用时,“子”文档被随机填充。

我不知道内部,但我会说他们是不一样的。

第一个可能是这样的:

  • find文件
  • 用文档调用callback
  • 填充ref(这是通过一个单独的查询完成的)

第二个可能是这样的:

  • find文件
  • 填充参考
  • 在ref解决之后调用callback函数

您正在见证的随机性是因为“填充ref”调用时间足够快,可能会在callback中使用它之前填充文档。 换句话说: 竞赛条件 。