问题描述
我正在尝试发送 xmpp 消息并获取一些数据,这些数据需要在我的前端显示。接收到的数据(字符串)我在 MobX 中推送到数组中,并显示该数组的消息。我的问题是无限请求循环,获取数据后:发送xmpp消息后,我获取数据并可以显示它们,但是在console.log中错误不断添加。看起来像那样
我的代码:
const username = 'user_login@domain.com';
const password = 'user_password';
const room = 'newroom';
const { client,xml,jid } = window.XMPP;
const xmpp = client({
service: //hidden,username: username,password: password,});
xmpp.start().catch((err) => {
console.error('start Failed',err);
});
xmpp.on('online',(address) => {
xmpp.send(xml('presence'));
get_archive()
});
xmpp.on('stanza',async (stanza) => {
if (stanza.is('presence')) return;
let usersMessages = '';
if (stanza.is('message')) {
usersMessages = stanza.children[0];
console.log(`[${timeMessage} ${senderFirstName} ${senderLastName}]: ${usersMessages}`);
//This is MobX
ConsoleMessages.sendMessage(`${senderFirstName} ${senderLastName}`,usersMessages);
}
if (!stanza.is('message')) return;
});
const get_archive = () => {
let message = xml(
'iq',{
type: 'set',to: `${room}@conference.com`,id: 'GetArchive',},xml(
'query',{ xmlns: 'urn:xmpp:mam:2' },xml('set',{ xmlns: 'http://jabber.org/protocol/rsm' },xml('max',{},50),xml('before')),),);
xmpp.send(message);
console.log(message);
};
const sendMessage = async (messageString) => {
//xml for the message to send
const message = xml(
'message',{
type: 'groupchat',from: 'user_login@domain.com',xml('body',messageString),xml('data',{
xmlns: //hidden
senderJID: 'user_login@domain.com',senderFirstName: 'FirstName',senderLastName: 'LastName',receiverMessageId: 'user1',mucname: room,}),);
//call to send message to the xmpp server
await xmpp.send(message);
};
稍后我在单击按钮时调用 get_archive()。
我认为问题在于我尝试将结果推送到 MobX 状态,因为当我评论这个字符串时,一切正常,我尝试将 MobX 替换为简单的 React useState 钩子,但结果是一样的
>如果我尝试在控制台中显示消息(没有设置为与其他消息一起排列),一切都显示良好,并且不会发生无限循环。也许问题是异步的?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)