Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor函数在发布和订阅完成加载集合之前执行_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript Meteor函数在发布和订阅完成加载集合之前执行

Javascript Meteor函数在发布和订阅完成加载集合之前执行,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我有一个meteor模板助手,它有一个搜索分数文档的功能。如果找不到匹配的文档,它将为用户创建一个新文档。不幸的是,meteor函数执行var score=UserScores.findOne()在发布和订阅功能完成之前。每次都会创建一个新的UserScore文档。如果启用“自动发布”,此问题将消失,并且不会创建重复记录。如何确保在执行模板助手之前先执行发布和订阅功能 我是否需要在/lib文件夹中放置meteor方法才能正确执行此操作,或者是否有方法在客户端执行此操作 var score = U

我有一个meteor模板助手,它有一个搜索分数文档的功能。如果找不到匹配的文档,它将为用户创建一个新文档。不幸的是,meteor函数执行
var score=UserScores.findOne()在发布和订阅功能完成之前。每次都会创建一个新的UserScore文档。如果启用“自动发布”,此问题将消失,并且不会创建重复记录。如何确保在执行模板助手之前先执行发布和订阅功能

我是否需要在/lib文件夹中放置meteor方法才能正确执行此操作,或者是否有方法在客户端执行此操作

var score = UserScores.findOne();

if(!score) {
score = {
    userId: Meteor.userId(),
    total: 0,
    goal: 200
};
UserScores.insert(score);
}

最简单的方法是进行模板级订阅

Template.myTemplate.onCreated(function() {
    var subscription = this.subscribe('publicationName', publicationArguments);
}
这是一种非常简单的方法,但是首先运行助手应该不会有问题


编辑:探索流星博客有一篇关于模板级订阅的文章。我强烈建议您阅读它:

谢谢@SirCharlesWatson我需要开始阅读Discover Media博客。“这很有帮助。”卡勒布马尔科夫很高兴我能帮上忙!我强烈推荐购买《发现流星》这本书。这是完全值得的钱,基本上涵盖了一切你需要知道。