流星订阅不会停止
Meteor subscription is not stopping
我得到了一个应该比较简单的问题。我设置了一个会话,然后使用存储在会话中的字符串订阅了一个集合。但是当那个会话发生变化时,我需要清除订阅数据并重新开始。
我的代码如下:
let subscriptionReady;
let filteredResults = [];
let rawResults = [];
let county = Session.get('county');
let type = Session.get('type');
这主要是创建一些空对象以便稍后填充的准备工作。这一切都在点击事件上设置。在我们设置这些占位符对象之后,我们去订阅这些会话:
if (county && !type) {
return function() {
if (subscriptionReady) {
subscriptionReady.stop();
}
filteredResults = [];
rawResults = [];
subscriptionReady = Meteor.subscribe('resourcesearch', county, {
onReady: () => {
rawResults = resourceCollection.find({}, { sort: {score: -1} }).fetch();
rawResults.forEach((result) => {
if (result.score) {
filteredResults.push(result);
}
});
}
});
}
在第三行我运行检查subscriptionReady
是否存在,然后stop
方法可用。那我就运行吧。但是,它实际上并没有阻止任何事情。
我错过了什么?
是.stop()
不是.stop
docs
您还可以通过在查询中包含 score
来避免过滤循环。您是在查找 score
键存在 {score: {$exists: true}}
的文档,还是仅存在非零键 {$score: {$ne: 0}}
的文档?
此外,您不需要清除订阅并重新开始。如果您将订阅参数 resourcesearch
设置为 反应式数据源 ,那么订阅将自动更新以提供您需要的文档。 Starting/stopping 响应搜索的订阅是一种反模式。
经过反复试验,我已经解决了。问题是停止呼叫的位置。我不再需要检查 subscriptionReady
是否存在,而是在 onReady
方法中停止订阅:
return function() {
filteredResults = [];
rawResults = [];
subscriptionReady = Meteor.subscribe('resourcesearch', county, {
onReady: () => {
rawResults = resourceCollection.find({}, { sort: {score: -1} }).fetch();
rawResults.forEach((result) => {
if (result.score) {
filteredResults.push(result);
}
});
subscriptionReady.stop();
}
});
我得到了一个应该比较简单的问题。我设置了一个会话,然后使用存储在会话中的字符串订阅了一个集合。但是当那个会话发生变化时,我需要清除订阅数据并重新开始。
我的代码如下:
let subscriptionReady;
let filteredResults = [];
let rawResults = [];
let county = Session.get('county');
let type = Session.get('type');
这主要是创建一些空对象以便稍后填充的准备工作。这一切都在点击事件上设置。在我们设置这些占位符对象之后,我们去订阅这些会话:
if (county && !type) {
return function() {
if (subscriptionReady) {
subscriptionReady.stop();
}
filteredResults = [];
rawResults = [];
subscriptionReady = Meteor.subscribe('resourcesearch', county, {
onReady: () => {
rawResults = resourceCollection.find({}, { sort: {score: -1} }).fetch();
rawResults.forEach((result) => {
if (result.score) {
filteredResults.push(result);
}
});
}
});
}
在第三行我运行检查subscriptionReady
是否存在,然后stop
方法可用。那我就运行吧。但是,它实际上并没有阻止任何事情。
我错过了什么?
是.stop()
不是.stop
docs
您还可以通过在查询中包含 score
来避免过滤循环。您是在查找 score
键存在 {score: {$exists: true}}
的文档,还是仅存在非零键 {$score: {$ne: 0}}
的文档?
此外,您不需要清除订阅并重新开始。如果您将订阅参数 resourcesearch
设置为 反应式数据源 ,那么订阅将自动更新以提供您需要的文档。 Starting/stopping 响应搜索的订阅是一种反模式。
经过反复试验,我已经解决了。问题是停止呼叫的位置。我不再需要检查 subscriptionReady
是否存在,而是在 onReady
方法中停止订阅:
return function() {
filteredResults = [];
rawResults = [];
subscriptionReady = Meteor.subscribe('resourcesearch', county, {
onReady: () => {
rawResults = resourceCollection.find({}, { sort: {score: -1} }).fetch();
rawResults.forEach((result) => {
if (result.score) {
filteredResults.push(result);
}
});
subscriptionReady.stop();
}
});