在#insert之后调用Collection#findOne找不到该元素

时间:2013-10-11 07:36:12

标签: meteor

我的用户正在Meteor.js应用程序中观察到一种非常奇怪,不可重现的行为。经过几个小时的调试后,我发现导致问题的特定代码行(在客户端上):

Articles = new Meteor.Collection("articles")

Articles.insert({name: "..."}, (err, id) ->
  article = Models.Articles.findOne(id)
  console.log("Created - #{err} - #{id} - #{article}")
)

大多数情况下输出看起来像预期的那样,但有时Models.Articles.findOne在客户端上找不到创建的文章,尽管它保存在数据库中:

Created - undefined - 1234 - undefined

您是否知道为什么会发生这种情况,以及如何解决此问题?

1 个答案:

答案 0 :(得分:3)

这可能是一场竞争条件。 insert的回调不保证您的pub-sub关系已完成向下发送您插入的文章。它确实为您提供_id,但就是这样。