如何确保成功离开聊天室? (instance.connection.muc.leave())

How to make sure that a chat-room was left successfully? (instance.connection.muc.leave())

在这里,我发现可以将回调作为 leave 方法的第三个参数添加:https://github.com/metajack/strophejs-plugins/blob/96da306f5394b901e190a3f7365fbbb676fddb51/muc/strophe.muc.js#L117

但是没用。 如何向 instance.connection.muc.leave() 方法添加回调或其他内容以确保成功离开聊天室? 也许还有更多方法可以确保我们已经离开聊天室?

function handler_cb() {
  console.log('>>>>>>>>> leave was successfull');
}
function leaveChat() {
  instance.connection.muc.leave(room, nick, handler_cb);
}

我认为插件本身有错误

他们使用 presenceid(节 ID)属性来匹配来自服务器的响应 https://github.com/metajack/strophejs-plugins/blob/master/muc/strophe.muc.js#L146

但并非所有服务器都在状态中使用节 ID。实际上 XEP-0045 exit presence 中没有关于 presence ID 的任何内容,因此某些服务器可能会实现 ID 回显逻辑但大多数情况下不会(并且看起来也像您的 XMPP 服务器)

所以我建议自己设置这个header,w/o 'presenceid':

function leaveChat() {
  instance.connection.addHandler(leaveCallback, null, "presence", "unavailable");
  instance.connection.muc.leave(room, nick);
}

function leaveCallback() {
  console.log('>>>>>>>>> leave was successfull');
  instance.connection.deleteHandler(leaveCallback);
}