Meteor 在嵌套函数中停止返回函数是否仍然停止?

Meteor 在嵌套函数中停止返回函数是否仍然停止?,meteor,meteor-tracker,Meteor,Meteor Tracker,此外,以下函数返回具有 如果从反应式计算调用stop方法,则在 重新运行或停止计算: Tracker.autorun(嵌套)Meteor.subscribe observe()和 游标上的observeChanges() 这意味着观察在此停止: Tracker.autorun -> cursor.observe() 但是这里呢 Tracker.autorun -> Tracker.nonReactive -> cursor.observe() 当在反应式计算

此外,以下函数返回具有 如果从反应式计算调用stop方法,则在 重新运行或停止计算:

Tracker.autorun(嵌套)Meteor.subscribe observe()和 游标上的observeChanges()

这意味着观察在此停止:

Tracker.autorun ->
  cursor.observe()
但是这里呢

Tracker.autorun ->
  Tracker.nonReactive ->
    cursor.observe()

当在反应式计算中创建
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'});
让observeCallback={
已添加(文档){
console.log('added',doc);
}
};
让handle=Tracker.autorun(函数(c){//c是计算对象
游标1.观察(observeCallback);//将自动停止
Tracker.nonreactive(函数(){
让观察者=光标2.观察(observeCallback);
c、 onStop(函数(){
observer.stop();//显式停止观察者
})
});
});
插入({foo:'bar'});
插入({foo:'baz'});
handle.stop();

当在反应式计算中创建一个
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'});
让observeCallback={
已添加(文档){
console.log('added',doc);
}
};
让handle=Tracker.autorun(函数(c){//c是计算对象
游标1.观察(observeCallback);//将自动停止
Tracker.nonreactive(函数(){
让观察者=光标2.观察(observeCallback);
c、 onStop(函数(){
observer.stop();//显式停止观察者
})
});
});
插入({foo:'bar'});
插入({foo:'baz'});
handle.stop();

它不仅仅是一个嵌套函数,它是一个
非反应的
上下文,因此其中的观察不会自动停止。它不仅仅是一个嵌套函数,它是一个
非反应的
上下文,因此它中的观察不会自动停止。