我来重现一下啊,在某个页面里,我传入conversation ID和client ID后,想列出该用户参与的所有对话列表,伪JS代码如下:
可以看到,client先注册了message和unreadmessage事件,然后进行了一次Query查询,条件为包括当前clientID,查询的结果会带有Lastmessage。这些事件的回调函数中都会带有console.log,来将这些参数返回到控制台。但是问题如下:
1, 到达先后顺序不确定
unreadmessage和query的结果都是异步的消息,二者到达的先后顺序不确定,如图: QQ20160517-1@2x.png1102x884 152 KB 上图为同一个面刷新两次的结果,可以看到两条消息到达的时间不确定。这样的话不太好根据其中固定的某一条来操作页面元素。
unreadmessage和query的结果都是异步的消息,二者到达的先后顺序不确定,如图:
2, Query结果里的Lastmessage随机缺失
当查询结束后理论上讲lastMessage里应当存在该对话的最后消息。然而当把他们console.log()到控制台时,结果不太正确: Screen Shot 2016-05-17 at 13.30.03.png852x828 171 KB 上图的lastMessage应该为TextMessage类型,但随机地显示为undefined。我发现的规律是:考虑到问题1里的消息到达先后顺序不确定,如果unreadmessage先到达,那么这里的lastMessage是正常的TextMessage;但如果Query先到达,那么unreadmessage返回的lastMessage就是undefined了。是Leancloud后台进行了一些操作么?
当查询结束后理论上讲lastMessage里应当存在该对话的最后消息。然而当把他们console.log()到控制台时,结果不太正确:
3, unreadMessageCount问题
>有一点像问题2,下班再回答。
@dangyuluo 之前的问题已经结束,你的问题是新的问题,我将它转移到了这里。第二个问题确实是个 Bug,我们将尽快修复。
那么第一个问题呢?正常来讲就是二者到达顺序不一致么?
两者到达的顺序确实无法判断,unreadmessage 是服务器推送的,query 是主动查询的,两个操作同时进行。
OK,这个也能理解。我现在优化了一下页面结构,二者到达顺序已经不影响了。第三个问题其实和第二个类似:unreadMessageCount问题
当Query先到达的时候,第二个到达的unreadmessage内,unreadMessageCount有时候无法读取,为undefined。应该和第二个原因类似。
在conversationQuery后必须调用withLastMessagesRefreshed(),不然就取不到lastmessage。这个bug我调了一天,真的很奇葩,log的时候有lastmessage,可就是取不到,真的很无语,后来用了withLastMessagesRefreshed就好了。