我有一个使用 Pusher Chatkit 的 Vue.js 应用程序。
我有一个问题,我已经有一段时间找不到答案了。每当我重新访问onNewMessage()
视图/组件时,都会多次触发Chatkit挂钩。这取决于我重新访问该页面的时间。
页面刷新或首次加载可以解决问题,直到下次重新访问。
一定是我每次访问视图时都创建了多个侦听器,但我不明白这些侦听器是什么。
Pusher 表示房间订阅在完成两次后会“覆盖”旧的订阅。
这是我的 chat.vue 组件
import chatConnection from '../chatkit.js'
created(){
let chatManagerConnectPromise = chatConnection(this, uid)
Promise.all([..., chatManagerConnectPromise, ...])
.then(results => {
// ...
this.initiateNewChatState(results[1])
// ...
})
.catch(error =>{
});
},
methods: {
initiateNewChatState(currentUser){
this.subscribeToAllUserRooms(currentUser)
},
subscribeToAllUserRooms(currentUser){
for(let room of currentUser.rooms){
this.subscribeToRoom(currentUser, room.id)
}
},
subscribeToRoom(currentUser, roomId){
currentUser.subscribeToRoom({
roomId: roomId,
hooks: {
onNewMessage: message => {
console.log("CHAT | onNewMessage | new: ", message.text)
}
},
messageLimit: 10
})
.catch(error => {
this.notifyError("Uh oh", "Something is not right")
});
}
}
这是我的 chatkit.js 内容:
import { ChatManager, TokenProvider } from '@pusher/chatkit'
export const chatConnection = ({ state, actions }, uid) =>{
return new ChatManager({
instanceLocator: "##:###:###:####:####",
userId: uid,
tokenProvider: new TokenProvider({url: 'https://...' })
})
.connect({
onAddedToRoom: room => {
// some action taken
},
onRemovedFromRoom: room => {
// some action taken
},
onRoomDeleted: room => {
// some action taken
}
})
.then(user => {
return user
})
.catch(error => console.log('CHATKIT | Error on connection', error))
}
同样,问题是onNewMessage()
在页面刷新/首次加载后第一次触发,但随后随着每次新页面访问(来回导航)增加一个。
我在每次访问时都创建了一些听众,但它不能是 ChatManager 而不是 User.subscribeToRoom!?
感谢您的任何指示。