排序延迟:流星Js

时间:2015-08-29 16:39:03

标签: meteor

我有聊天应用,我在其中加载了最后5条消息,就像这样做

{{#if haseMoreMessages}}
    <div class="loadmore text-center" id="incLimit">Load More</div>
{{/if}}
{{#each messages}}
    {{> message}}
{{/each}}

messages: function(){
   var messages = Messages.find({},{sort:{createdAt:1}}); // I can remove {sort:{createdAt:1}} and all ok, nut it's not fit
   return messages;
},
haseMoreMessages:function(){
   if (Session.get('messageLimit') > Messages.find().count()) return false;
   return true;
}

Messages.find({room: Rooms.findOne({users : { $in : [this.userId]}})._id},{ sort: { createdAt: -1 } , limit : limitM});

所以当我写新消息时,它显示在100ms或更长时间,它显示在顶部,在200ms或更长时间后显示在底部,例如:

- mes1

- mes2

- mes3

我写mes4

- mes4

- mes1

- mes2

- mes3

经过一些ms

- mes1

- mes2

- mes3

- mes4

当我从{sort:{createdAt:1}}中移除var messages = Messages.find({},{sort:{createdAt:1}})所有节目都没问题,没有延迟,当我点击显示更多按钮时,所有旧消息显示在底部,但它们必须显示在页面的 TOP 。这就是为什么我需要{sort:{createdAt:1}}

所以我知道我该怎么做?

1 个答案:

答案 0 :(得分:0)

根据您的评论,插入发生在客户端上,但createdAt字段仅填充在服务器上。因此,Meteor首先使用没有createdAt字段的本地数据库来立即显示插入的结果。然后,在往返服务器并更新到查询之后,排序按预期进行。

两个选项:完全插入服务器上,或者附加客户端上的createdAt字段。