Mongo在Meteor Server上插入后如何等待观察者调用
Posted
技术标签:
【中文标题】Mongo在Meteor Server上插入后如何等待观察者调用【英文标题】:How to wait observer call after Mongo insert on Meteor Server 【发布时间】:2020-03-08 01:05:27 【问题描述】:我想,当我插入 Mongo 时,Meteor 的 Fiber 魔法会等待/阻塞,直到数据库确认写入,但直到调用观察者。有没有办法等他们?
我在服务器代码中插入数据,并且我有一个缓存层,它观察集合上添加的事件并从中转换 ObjectModel 实例:
class CachingService
attachObservers()
this.collection.observe(
added: models => this.added(models)
)
const id = Placements.insert(...)
console.log(`Inserted $id -`, CachingServices.Placements.getByID(id), Placements.getByID(id, false))
将打印:
插入的 ... - 未定义,...
即CachingService 尚未收到插入,但数据库收到了。
【问题讨论】:
你是在 Meteor 方法内部还是外部执行插入? 【参考方案1】:也许尝试在集合游标上注入 observe
属性而不是实例(即 testCollection.find().observe
)。
Meteor.startup(() =>
const testCollection = new Mongo.Collection("testCollection");
testCollection.find().observe(
added: function(document)
console.log("groups observe added value function");
console.log(document);
);
testCollection.insert( foo: 'bar' );
)
其他有用的问题: Meteor collection observe changes rightly cursor.observe(added) behavior in Meteor
【讨论】:
我们已经在观察光标了。这是流星支持这样做的唯一方式。您链接的其他问题涉及现有模型的观察事件 - 但我们已经处理了。以上是关于Mongo在Meteor Server上插入后如何等待观察者调用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 javascript (meteor.js) 中操作返回的 mongo 集合/游标?