Add API Module! #13

Merged
MrKBear merged 2 commits from dev-mrkbear into master 2021-12-31 11:24:28 +08:00
4 changed files with 55 additions and 15 deletions
Showing only changes of commit af68984caa - Show all commits
+1 -1
View File
@@ -11,7 +11,7 @@ App<IAppAPIParam>({
*/ */
api: { api: {
nextId: 1, nextId: 1,
pool: [] pool: new Set()
}, },
/** /**
+44 -10
View File
@@ -13,8 +13,9 @@ interface IAppAPIParam {
/** /**
* 请求池 * 请求池
* 保存正在等待的 API 请求
*/ */
pool: API<IAnyData, IAnyData>[]; pool: Set<API<IAnyData, IAnyData>>;
} }
} }
@@ -160,7 +161,8 @@ class API<I extends IAnyData, O extends IAnyData> extends EventEmitter<IAPIEvent
/** /**
* 初始化标签 * 初始化标签
*/ */
public initLabel() { public initLabel(key: string) {
this.key = key;
this.LogLabel = new LogLabel( this.LogLabel = new LogLabel(
`API:${ this.key }`, colorRadio(200, 120, 222) `API:${ this.key }`, colorRadio(200, 120, 222)
); );
@@ -171,14 +173,14 @@ class API<I extends IAnyData, O extends IAnyData> extends EventEmitter<IAPIEvent
* 注意:data 是不安全的,请传入数据副本 * 注意:data 是不安全的,请传入数据副本
* @param data API需要的全部数据 * @param data API需要的全部数据
*/ */
public param(data?: Partial<I>) { public param(data?: Partial<I>):this {
this.data = data; this.data = data;
if (this.data === void 0) { if (this.data === void 0) {
Logger.log(`数据初始化异常: 没有输入 [data] 数据!`, Logger.log(`数据初始化异常: 没有输入 [data] 数据!`,
LevelLogLabel.FatalLabel, this.LogLabel); LevelLogLabel.FatalLabel, this.LogLabel);
return; return this;
} }
for (let key in this.params) { for (let key in this.params) {
@@ -226,12 +228,6 @@ class API<I extends IAnyData, O extends IAnyData> extends EventEmitter<IAPIEvent
// 触发数据初始化事件 // 触发数据初始化事件
this.emit("initData", this.data); this.emit("initData", this.data);
if (this.data === void 0) {
Logger.log(`收集请求数据异常: 没有输入 [data] 数据!`,
LevelLogLabel.FatalLabel, this.LogLabel);
return;
}
// 重置请求数据 // 重置请求数据
const requestData:IWxRequestOption<O> = this.requestData = { const requestData:IWxRequestOption<O> = this.requestData = {
url: API.baseUrl + this.url, url: API.baseUrl + this.url,
@@ -274,6 +270,44 @@ class API<I extends IAnyData, O extends IAnyData> extends EventEmitter<IAPIEvent
} }
} }
} }
return this;
}
/**
* 请求的唯一标识符
*/
protected id:number = 0;
/**
* 将此请求加入到请求池
*/
protected addPool() {
let app = getApp<IAppAPIParam>();
// 获取标识符
if (!this.id) {
this.id = app.api.nextId;
app.api.nextId ++;
}
app.api.pool.add(this as any);
}
/**
* 从 pool 中移除
*/
protected removePool() {
let app = getApp<IAppAPIParam>();
app.api.pool.delete(this as any);
}
/**
* 运行 API
*/
public run() {
this.addPool();
} }
} }
+8
View File
@@ -33,6 +33,14 @@ export class EventEmitter<Events extends Record<EventType, unknown>> {
this.all = new Map(); this.all = new Map();
} }
public resetAll() {
this.all = new Map();
}
public reset<Key extends keyof Events>(type: Key) {
this.all!.set(type, [] as EventHandlerList<Events[keyof Events]>);
}
on<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>): void; on<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>): void;
on(type: '*', handler: WildcardHandler<Events>): void; on(type: '*', handler: WildcardHandler<Events>): void;
+2 -4
View File
@@ -28,8 +28,6 @@ implements Partial<ILifetime> {
} }
class TestApi extends API<ITestApiInput, {}> { class TestApi extends API<ITestApiInput, {}> {
public override key:string = "TestApi";
public override params: IParamSetting<ITestApiInput> = { public override params: IParamSetting<ITestApiInput> = {
name: { name: {
@@ -44,7 +42,7 @@ implements Partial<ILifetime> {
public constructor() { public constructor() {
super(); super();
this.initLabel(); this.initLabel("TestApi");
this.emit("initData", {}) this.emit("initData", {})
@@ -65,7 +63,7 @@ implements Partial<ILifetime> {
info: { info: {
data: "abc" data: "abc"
} }
}); }).run();
console.log(api); console.log(api);
} }
} }