注册

环信 Web IM 获取好友列表失败

 运行环境: 
require('@/assets/lib/huanxin/webim.config.js')
require('@/assets/lib/huanxin/strophe-1.2.8.js')
require('easemob-websdk')
 
如题 用户登录,获取群组信息都成功, 但是获取好友有问题, 当使用串行请求时, 使用自己的测试appkey请求好友列表失败,改用官方demo的appkey请求成功, 当使用并发请求时两者都会失败, 错误代码16 , 即使单独请求好友列表也会失败, 代码如下:
export async function chatInit() {
  if (window.CHAT) {
    console.log('chatInit 已初始化过了!')
    return window.CHAT
  }
  let conn = chatConnect();
  let userHash = getUserHash();
  let info = await getChatInfo(userHash)
  let token = await chatLogin(info.data)
  let group = await getGroup()
  let roster = await getRoster()
  // 获取好友列表失败: 使用官方demo的appkey并发请求,使用自己的测试appkey串行请求均失败, 仅使用官方key串行请求成功,偶尔失败 ,错误代码16 原因未知 
  // let [group, roster] = await Promise.all([getGroup(), getRoster()])
  window.CHAT = {
    conn,
    token,
    roster,
    group
  }
  return window.CHAT
}
已邀请:
自己排查源码找到原因了, 折腾了一天累觉不爱, 强迫症害人不浅
环信的conn实例的登录状态 states 更改, 不是在登录方法 open 的回调函数中执行, 而是在 全局的监听函数 conn.listen({ onOpened(){}}) 中执行, 并且重点是, onOpened 事件并不是在 open(success)钩子后同步执行,而是有一个延迟很大的异步,  因此如果包装 conn.open({success(){}}) 为promise, 则会出现各种奇怪错误, 报错为未登录, 比如 使用了 strophe 库的 getRouset, 但是 使用 ajax 的方法 getGroup 又不受影响

请问最后是如何解决的?

要回复问题请先登录注册