mirror of
https://github.com/cool-team-official/cool-admin-midway.git
synced 2025-12-10 16:12:50 +00:00
103 lines
2.2 KiB
Plaintext
103 lines
2.2 KiB
Plaintext
---
|
|
description: 事件(Event)
|
|
globs:
|
|
---
|
|
# 事件(Event)
|
|
|
|
事件是开发过程中经常使用到的功能,我们经常利用它来做一些解耦的操作。如:更新了用户信息,其他需要更新相关信息的操作自行监听更新等
|
|
|
|
## 新建监听
|
|
|
|
```ts
|
|
import { Provide, Scope, ScopeEnum } from "@midwayjs/core";
|
|
import { CoolEvent, Event } from "@cool-midway/core";
|
|
|
|
/**
|
|
* 接收事件
|
|
*/
|
|
@CoolEvent()
|
|
export class DemoEvent {
|
|
/**
|
|
* 根据事件名接收事件
|
|
* @param msg
|
|
* @param a
|
|
*/
|
|
@Event("updateUser")
|
|
async updateUser(msg, a) {
|
|
console.log("ImEvent", "updateUser", msg, a);
|
|
}
|
|
}
|
|
```
|
|
|
|
## 发送事件
|
|
|
|
```ts
|
|
import { Get, Inject, Provide } from "@midwayjs/core";
|
|
import {
|
|
CoolController,
|
|
BaseController,
|
|
CoolEventManager,
|
|
} from "@cool-midway/core";
|
|
|
|
/**
|
|
* 事件
|
|
*/
|
|
@CoolController()
|
|
export class DemoEventController extends BaseController {
|
|
@Inject()
|
|
coolEventManager: CoolEventManager;
|
|
|
|
/**
|
|
* 发送事件
|
|
*/
|
|
@Get("/send")
|
|
public async send() {
|
|
this.coolEventManager.emit("updateUser", { a: 1 }, 12);
|
|
}
|
|
}
|
|
```
|
|
|
|
## 多进程通信
|
|
|
|
当你的项目利用如`pm2`等工具部署为 cluster 模式的时候,你的项目会有多个进程,这时候你的事件监听和发送只会在当前进程内有效,如果你需要触发到所有或者随机一个进程,需要使用多进程通信,这里我们提供了一个简单的方式来实现多进程通信。
|
|
|
|
需要根据你的业务需求来使用该功能!!!
|
|
|
|
```ts
|
|
import { Get, Inject, Provide } from "@midwayjs/core";
|
|
import {
|
|
CoolController,
|
|
BaseController,
|
|
CoolEventManager,
|
|
} from "@cool-midway/core";
|
|
|
|
/**
|
|
* 事件
|
|
*/
|
|
@Provide()
|
|
@CoolController()
|
|
export class DemoEventController extends BaseController {
|
|
@Inject()
|
|
coolEventManager: CoolEventManager;
|
|
|
|
@Post("/global", { summary: "全局事件,多进程都有效" })
|
|
async global() {
|
|
await this.coolEventManager.globalEmit("demo", false, { a: 2 }, 1);
|
|
return this.ok();
|
|
}
|
|
}
|
|
```
|
|
|
|
**globalEmit**
|
|
|
|
```ts
|
|
/**
|
|
* 发送全局事件
|
|
* @param event 事件
|
|
* @param random 是否随机一个
|
|
* @param args 参数
|
|
* @returns
|
|
*/
|
|
globalEmit(event: string, random?: boolean, ...args: any[])
|
|
```
|