【发布时间】:2015-04-16 23:21:43
【问题描述】:
我正在尝试构建一个学习应用程序,目前它需要从 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 个副本,这就是我尽量避免。
【问题讨论】:
-
那是因为助手运行异步,所以首先 == 0 为真,然后另一个语句为真,这就是你在 if 语句中得到的其他控制台,例如 pine
console.log(Posts.find({r_id: result.id}).count()),你会获取0并在 1 秒内获取 lester 你会得到另一个号码。
标签: javascript meteor