我試圖建立一個學習應用程序,目前它需要從一個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();
}
});
和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
時,我得到的錯誤與Posts.findOne({r_id: result.id}) == null
相同,但由於某種原因,在javascript文件中,它仍然運行真實部分,然後我得到了50份t他正是我想要避免的帖子。
那麼,因爲幫助者運行異步,所以首先== 0它的真實,然後其他語句它的真正那就是你得到其他控制檯,例如鬆'console.log(Posts.find({r_id:result.id })。count())'在if語句中,你將在1秒內得到'0'和lester,你將得到另一個數字。 – Ethaan