feat: emitter

dev/emitter
lyt 7 months ago
parent 071935b1bf
commit c1c9fb8c6f

@ -0,0 +1,33 @@
/**
* 或者使用tiny-emitter实现
*/
const eventNames = ['API:UN_AUTH', 'API:INVALID', 'FAILD']
class EventEmitter {
constructor() {}
listeners = {
'API:UN_AUTH': new Set(),
'API:INVALID': new Set(),
'FAILED': new Set(),
}
on(eventName, listener) {
this.listeners[eventName].add(listener)
}
emit(eventName, ...args) {
this.listeners[eventName].forEach((listener) => listener(...args))
}
once(eventName, listener) {
const onceListener = (...args) => {
listener(...args)
this.off(eventName, onceListener)
}
this.on(eventName, onceListener)
}
off(eventName, listener) {
this.listeners[eventName].delete(listener)
}
}
export default new EventEmitter()

@ -1,5 +1,6 @@
import { BUILD_VERSION } from '@/config'
import requestEmitter from '@/emitter/requestEmitter'
const customHeaders = []
@ -35,6 +36,7 @@ function checkBizCode(responseJson) {
if (responseJson.errcode === 0) {
return responseJson;
} else {
requestEmitter.emit('FAILED', responseJson)
throw new Error(responseJson.errmsg + ': ' + responseJson.errcode);
}
}

@ -27,6 +27,7 @@ import 'react-chat-elements/dist/main.css'
import EmailFetch from './Conversations/Online/Components/EmailFetch'
import FetchEmailWorker from './../workers/fetchEmailWorker?worker&url'
import { clearWebsocketLog, readWebsocketLog } from '@/utils/commons'
import requestEmitter from '@/emitter/requestEmitter';
// const fetchEmailWorkerURL = new URL('/src/workers/fetchEmailWorker.js', import.meta.url);
const fetchEmailWorker = new Worker(FetchEmailWorker, { type: 'module' });
@ -37,6 +38,10 @@ function AuthApp() {
const [messageApi, contextHolder] = message.useMessage()
requestEmitter.on('FAILED', (e) => {
messageApi.error('请求失败')
})
const { colorPrimary, borderRadius } = useThemeContext()
const [loginUser, sendNotify, isPermitted] = useAuthStore((state) => [
state.loginUser, state.sendNotify, state.isPermitted

Loading…
Cancel
Save