我希望能够停止并重新启动Meteor中我的集合上的观察者。
想象一下,我有以下观察者:
// Imagine some collection of Blog posts "Posts"
Posts.find().observe({
changed: notifySubscribedUsers
});
// function notifySubscribedUsers() { ... }
// is some function that will email everyone saying some post was updated
现在想象一下我想要更新很多帖子,但我不希望调用观察者。如何访问观察者,停止/暂停它们,然后重新启动它们(在db作业完成后)?
TIA
答案 0 :(得分:15)
观察者返回句柄:
var handle = Posts.find().observe({
changed: notifySubscribedUsers
});
然后你可以用:
来阻止它handle.stop()
传统意义上不可能“暂停”它,如果你想暂停它,你可以忽略它给你的数据。
要用简洁的方法做到这一点,你可以这样做:
var handle;
var start = function() {
if(handle) handle.stop();
var handle = Posts.find().observe({
changed: notifySubscribedUsers
});
}
var stop = function() { if(handle) handle.stop }
或者把它放在一个集合上:
// posts.js collection file
Posts.startObservers = function startObservers() {
Posts.observer = Posts.find().observe({
change: notifySubscribedUsers // or some other function
});
};
Posts.stopObservers = function stopObservers() {
if(Posts.observer) {
Posts.observer.stop(); // Call the stop
}
};
// Trigger Somewhere else in the code
Posts.stopObservers();
MyTool.doWorkOnPosts(); // Some contrived work on the Posts collection
Posts.startObservers();