先看看Leancloud现在是怎么做的:
假设某个对话里我依次发送了1, 2, 3,..., 24, 25共25个数字。
初始化时设置MessageIterator的参数为limit:10
,紧接着调用MessageIterator.next()
,那么获得的result.value
顺序为:16, 17, 18,..., 24, 25
。再次调用MessageIterator.next()
,则会得到6, 7, 8,..., 14, 15
。
但是问题来了,一般而言,历史聊天记录都是堆叠在上部,也就是说越久远的历史数据就越处于顶部(#1),消息时间如下图:
(图片里假设一次取五条历史数据)这时对于MessageIterator.next()
返回的查询结果里的每条数据,就会有一个在顶部or尾部插入的问题。根据(#1)处的分析,第二次next()
返回的消息应当插入到现有消息列表(一般为ul>li
)顶部,那么根据next()
返回的消息顺序,页面DOM操作顺序就成了下图:
可以看到消息顺序已经不是16, 17, 18, 19,...,24, 25
,而是在20
处顺序颠倒了。
因此考虑到大多数页面结构都是时间越久的消息越靠上,我觉得MessageIterator返回的消息顺序也应当是按照时间倒序排列,这样我们可以直接将每条消息插入到到顶部就可以了。
有人说可以用javascript里的result.value.reverse()
来将返回值点到顺序,但是经我个人实验,这样会使realtime里定义的forEach失效,使得下一次调用MessageIterator.next()
时,获取到的消息列表并不是往前10位,而仅仅是往前一位。
-
创建时间
16年5月21日
-
最后回复
16年5月23日
-
2
回复
-
1.1K
浏览
-
2
用户