# MessageCenter
**Repository Path**: DieHunter/message-center
## Basic Information
- **Project Name**: MessageCenter
- **Description**: 基于发布订阅模式实现的一个事件消息中心
- **Primary Language**: TypeScript
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: https://www.npmjs.com/package/event-message-center
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 1
- **Created**: 2022-04-14
- **Last Updated**: 2025-02-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: TypeScript, JavaScript
## README
# EventMessageCenter
## 介绍
基于 JS 发布订阅模式实现的一个事件消息中心
## 博客
https://hunter1024.blog.csdn.net/article/details/124452792
## 调试说明
1. pnpm i (依赖安装)
2. pnpm build(构建)
3. pnpm example(调试源码)
4. example 文件夹下是使用 demo
5. 在 esm,cjs,window 环境下导入该工具库
## 使用说明
### 安装
`npm install event-message-center`
或
`yarn add event-message-center`
或
`pnpm install event-message-center`
### 引入
#### ESM
```javascript
import { messageCenter } from "event-message-center";
```
#### CJS
```javascript
const { messageCenter } = require("event-message-center");
```
#### 浏览器中
```html
```
### 用法
#### 创建实例
```javascript
const bus = new MessageCenter();
```
#### 直接使用全局的单例
```javascript
const bus = messageCenter;
```
#### 注册事件至调度中心
```javascript
messageCenter.on("a", funcA);
```
#### 触发调度中心的某个或者某些该事件类型下注册的函数
```javascript
messageCenter.emit("a", { state: "stop" });
```
#### 销毁监听
```javascript
messageCenter.un("a", funcA);
messageCenter.un("a");
```
#### 只注册一次监听,执行即销毁
```javascript
messageCenter.once("a", funcA);
```
#### 重置调度中心
```javascript
messageCenter.clear();
```
#### 判断事件是否被订阅
```javascript
messageCenter.has("a");
```
#### 同一个事件被绑定了多少函数
```javascript
messageCenter.handlerLength("a");
```
#### 监听 invoke 的消息,若 handler 中进行了计算或者异步操作,会反馈给 invoke
```javascript
messageCenter.watch("b", funcB);
```
#### 触发 watch 事件,并且接收 watch 处理结果
```javascript
messageCenter.invoke("b", { num1: 1, num2: 2 }).then((result) => {
console.log(result);
});
```
#### 构造函数 options
```javascript
const messageCenter2 = new MessageCenter({ blackList: ["c"], maxLen: 2 });
```
##### 黑名单
```javascript
messageCenter2.on("c", () => {}); // c is not allow
```
##### 限制事件个数
```javascript
messageCenter2.on("b", () => {});
messageCenter2.on("b", () => {});
messageCenter2.on("b", () => {}); // the number of b must be less than 2
```