当在反应式计算中创建MiniMongo
反应式句柄(find()
,等)时,将检测到它并将侦听器附加到计算中,该侦听器将在计算无效(或停止)时停止句柄。observe()
MiniMongo
onInvalidate
无论是直接在autorun
回调中完成,还是在从回调中调用的函数中完成,只要它是同步完成的(即,在同一计算的上下文中)。
有一个值得注意的例外:非反应性回调。
在Tracker.nonreactive
非反应性上下文中触发回调,因此当前计算设置为null
并Tracker.active
设置为false
。在这种情况下,MiniMongo
不会附加上述监听器,更改观察器也不会自动停止。
不过,您可以手动停止它:
const MyCollection = new Mongo.Collection(null);
const cursor1 = MyCollection.find({foo: 'bar'});
const cursor2 = MyCollection.find({foo: 'baz'});
let observeCallback = {
added(doc) {
console.log('added', doc);
}
};
let handle = Tracker.autorun(function(c) { // c is the computation object
cursor1.observe(observeCallback); // will be automatically stopped
Tracker.nonreactive(function() {
let observer = cursor2.observe(observeCallback);
c.onStop(function() {
observer.stop(); // explicitly stops the observer
})
});
});
MyCollection.insert({foo: 'bar'});
MyCollection.insert({foo: 'baz'});
handle.stop();