Use a $watch-based system to register subscribe handlers when the events component is not yet ready instead of relying on setTimeout hacks
This commit is contained in:
parent
8f477fa335
commit
1036358b28
3 changed files with 27 additions and 4 deletions
|
@ -17,6 +17,7 @@ export default {
|
|||
data() {
|
||||
return {
|
||||
ws: null,
|
||||
initialized: false,
|
||||
pending: false,
|
||||
opened: false,
|
||||
timeout: null,
|
||||
|
@ -125,6 +126,7 @@ export default {
|
|||
this.ws.onopen = this.onOpen
|
||||
this.ws.onerror = this.onError
|
||||
this.ws.onclose = this.onClose
|
||||
this.initialized = true
|
||||
},
|
||||
|
||||
subscribe(msg) {
|
||||
|
|
|
@ -118,7 +118,7 @@ export default {
|
|||
},
|
||||
|
||||
mounted() {
|
||||
setTimeout(this.registerHandlers, 10000)
|
||||
this.registerHandlers()
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -3,11 +3,32 @@ import { bus } from "@/bus";
|
|||
|
||||
export default {
|
||||
name: "Events",
|
||||
computed: {
|
||||
_eventsReady() {
|
||||
return this.$root.$refs.events?.initialized
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
subscribe(handler, ...events) {
|
||||
bus.emit('subscribe', {
|
||||
events: events,
|
||||
handler: handler,
|
||||
const subFunc = () => {
|
||||
bus.emit('subscribe', {
|
||||
events: events,
|
||||
handler: handler,
|
||||
})
|
||||
}
|
||||
|
||||
if (this._eventsReady) {
|
||||
subFunc()
|
||||
return
|
||||
}
|
||||
|
||||
const self = this
|
||||
const unwatch = this.$watch( () => self._eventsReady, (newVal) => {
|
||||
if (newVal) {
|
||||
subFunc()
|
||||
unwatch()
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue