Im пытается создать учебное приложение, где на данный момент ему нужно получить первые 7 сообщений из субредакта, а затем, если он еще не находится в базе данных, добавьте его в базу данных. Однако по какой-то причине он запускает как if, так и еще 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();
}
});
и HTML сторона:
<template name="posts">
<div class="col-md-12 posts-div">
{{#each posts }}
<div class="col-md-8">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">{{ title }}</h3>
</div>
<div class="panel-body">{{{ body }}}</div>
<div class="panel-footer">
<div class="col-md-2">{{ score }}</div>
<div class="col-md-2 col-md-offset-3">{{ subreddit }}</div>
<div class="col-md-2 col-md-offset-3">{{ createdBy }}</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="panel panel-primary">
</div>
</div>
{{/each}}
</div>
<hr>
</template>
Я заменил вставки кода с помощью простых журналов консоли и эти результаты я получаю:
if
if
if
if
if
if
if
else
else
else
else
else
else
else
Когда я запускаю Posts.find({r_id: result.id}).count() == 0
в консоли, я получаю false с Posts.findOne({r_id: result.id}) == null
, но по какой-то причине в javascript-файле он по-прежнему запускает истинную часть, и тогда я получаю как 50 копий t он тот же пост, которого я пытаюсь избежать.
Ну, это потому, что помощники запускают async, поэтому сначала == 0 его истинное, а затем другое утверждение, истинное, то есть то, что вы получаете из других консолей, например, console 'console.log (Posts.find ({r_id: result.id }). count()) 'внутри оператора if, и вы получите' 0' и lester за 1 секунду, вы получите другой номер. – Ethaan