Javascript Meteor唯一文档字段?

Javascript Meteor唯一文档字段?,javascript,meteor,Javascript,Meteor,我正在尝试构建一个学习应用程序,目前它需要从subreddit获取前7篇文章,如果数据库中还没有这篇文章,则将其添加到数据库中。然而,由于某种原因,它同时运行if和else 7次,我不知道为什么。以下是帮助器方法: Template.posts.helpers({ posts : function () { Meteor.call('getPosts', "tifu", function(e, results){ var result = JSON.parse(resul

我正在尝试构建一个学习应用程序,目前它需要从subreddit获取前7篇文章,如果数据库中还没有这篇文章,则将其添加到数据库中。然而,由于某种原因,它同时运行if和else 7次,我不知道为什么。以下是帮助器方法:

Template.posts.helpers({
  posts : function () {
    Meteor.call('getPosts', "tifu", function(e, results){
      var result = JSON.parse(results.content).data.children;
      Session.set('postsResults', result);
    });
    for(var i=0; i<7; i++){
      var result = Session.get('postsResults')[i].data;
      if(Posts.find({r_id: result.id}).count() == 0){
        console.log("if");
      } else {          
        console.log("else");
      };
    };
    return Posts.find();
  }
});

在控制台中运行
Posts.find({r\u id:result.id}).count()==0
时,我得到与
Posts.findOne({r\u id:result.id})相同的false==null
但由于某种原因,在javascript文件中,它仍然运行真实部分,然后我得到了50份相同帖子的副本,这正是我试图避免的。

在助手中使用
Meteor.call
不是最佳选择。每当出现响应性更改时,助手的
功能将重新运行。这就是为什么它会运行这么多次

使用
模板。改用onCreated
回调:

Template.posts.onCreated(function() {
    Meteor.call('getPosts', "tifu", function(e, results){
        var result = JSON.parse(results.content).data.children;
        Session.set('postsResults', result);
    });
});
和你的助手:

Template.posts.helpers({
  posts : function () {
    var r = Session.get('postsResults')

    for(var i=0; i<7; i++){
        if(!r) continue;
        var result = r[i].data;
        if(Posts.find({r_id: result.id}).count() == 0){
          console.log("if");
        } else {          
          console.log("else");
        };
      };
    return Posts.find();
  }
});
Template.posts.helpers({
职位:职能(){
var r=Session.get('postsResults')

对于(var i=0;我会这样做,因为helpers是异步运行的,所以首先==0它是true,然后另一个语句它是true这就是您得到的其他控制台,例如pine
console.log(Posts.find({r\u id:result.id}).count())
在if语句中,您将得到
0
,lester在1秒后您将得到另一个数字。
Template.posts.onCreated(function() {
    Meteor.call('getPosts', "tifu", function(e, results){
        var result = JSON.parse(results.content).data.children;
        Session.set('postsResults', result);
    });
});
Template.posts.helpers({
  posts : function () {
    var r = Session.get('postsResults')

    for(var i=0; i<7; i++){
        if(!r) continue;
        var result = r[i].data;
        if(Posts.find({r_id: result.id}).count() == 0){
          console.log("if");
        } else {          
          console.log("else");
        };
      };
    return Posts.find();
  }
});