我来重现一下啊,在某个页面里,我传入conversation ID和client ID后,想列出该用户参与的所有对话列表,伪JS代码如下:

可以看到,client先注册了message和unreadmessage事件,然后进行了一次Query查询,条件为包括当前clientID,查询的结果会带有Lastmessage。
这些事件的回调函数中都会带有console.log,来将这些参数返回到控制台。但是问题如下:

1, 到达先后顺序不确定

unreadmessage和query的结果都是异步的消息,二者到达的先后顺序不确定,如图:


上图为同一个面刷新两次的结果,可以看到两条消息到达的时间不确定。这样的话不太好根据其中固定的某一条来操作页面元素。


2, Query结果里的Lastmessage随机缺失

当查询结束后理论上讲lastMessage里应当存在该对话的最后消息。然而当把他们console.log()到控制台时,结果不太正确:


上图的lastMessage应该为TextMessage类型,但随机地显示为undefined。
我发现的规律是:考虑到问题1里的消息到达先后顺序不确定,如果unreadmessage先到达,那么这里的lastMessage是正常的TextMessage;但如果Query先到达,那么unreadmessage返回的lastMessage就是undefined了。
是Leancloud后台进行了一些操作么?


3, unreadMessageCount问题

>有一点像问题2,下班再回答。

@dangyuluo 之前的问题已经结束,你的问题是新的问题,我将它转移到了这里。
第二个问题确实是个 Bug,我们将尽快修复。

那么第一个问题呢?正常来讲就是二者到达顺序不一致么?

两者到达的顺序确实无法判断,unreadmessage 是服务器推送的,query 是主动查询的,两个操作同时进行。

OK,这个也能理解。我现在优化了一下页面结构,二者到达顺序已经不影响了。
第三个问题其实和第二个类似:
unreadMessageCount问题

当Query先到达的时候,第二个到达的unreadmessage内,unreadMessageCount有时候无法读取,为undefined。应该和第二个原因类似。

在conversationQuery后必须调用withLastMessagesRefreshed(),不然就取不到lastmessage。这个bug我调了一天,真的很奇葩,log的时候有lastmessage,可就是取不到,真的很无语,后来用了withLastMessagesRefreshed就好了。