mm_expand 2.4.0 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/eventer.js +29 -12
  2. package/package.json +1 -1
package/lib/eventer.js CHANGED
@@ -628,7 +628,7 @@ Eventer.prototype._execSingleTask = async function (o, params, ctx, options) {
628
628
  this._handleSuccessResult({ result, o, ctx, arr, task });
629
629
  } catch (e) {
630
630
  // 处理错误
631
- this._handleTaskError(e, o, ctx, task);
631
+ this._handleSeqTaskError(e, o, ctx, task);
632
632
  }
633
633
  };
634
634
 
@@ -640,8 +640,12 @@ Eventer.prototype._createTask = function (o, full_key) {
640
640
  cancel: () => { cancelled = true; }
641
641
  };
642
642
 
643
- // 添加到进行中的任务列表
643
+ // 添加到进行中的任务列表(防御性处理重入调用导致 key 已被清理的情况)
644
644
  let tasks = this._tasks.get(full_key);
645
+ if (!tasks) {
646
+ tasks = [];
647
+ this._tasks.set(full_key, tasks);
648
+ }
645
649
  tasks.push(task);
646
650
 
647
651
  return { task, tasks, cancelled };
@@ -667,7 +671,7 @@ Eventer.prototype._handleSuccessResult = function (config) {
667
671
  task.tasks.splice(task.tasks.indexOf(task.task), 1);
668
672
  };
669
673
 
670
- Eventer.prototype._handleTaskError = function (e, o, ctx, task) {
674
+ Eventer.prototype._handleSeqTaskError = function (e, o, ctx, task) {
671
675
  ctx.error_count++;
672
676
  this.log('error', `事件执行失败 [${ctx.space}:${ctx.event}] - ${o.name}`, e);
673
677
 
@@ -780,6 +784,10 @@ Eventer.prototype._createWaterfallTask = function (obj, full_key) {
780
784
  };
781
785
 
782
786
  let tasks = this._tasks.get(full_key);
787
+ if (!tasks) {
788
+ tasks = [];
789
+ this._tasks.set(full_key, tasks);
790
+ }
783
791
  tasks.push(task);
784
792
 
785
793
  return { task, tasks, cancelled };
@@ -900,6 +908,10 @@ Eventer.prototype._createRaceTask = function (obj, full_key) {
900
908
  };
901
909
 
902
910
  let tasks = this._tasks.get(full_key);
911
+ if (!tasks) {
912
+ tasks = [];
913
+ this._tasks.set(full_key, tasks);
914
+ }
903
915
  tasks.push(task);
904
916
 
905
917
  return { task, tasks, cancelled };
@@ -969,8 +981,12 @@ Eventer.prototype._createParallelTask = function (obj, full_key) {
969
981
  cancel: () => { cancelled = true; }
970
982
  };
971
983
 
972
- // 添加到进行中的任务列表
984
+ // 添加到进行中的任务列表(防御性处理重入调用导致 key 已被清理的情况)
973
985
  let tasks = this._tasks.get(full_key);
986
+ if (!tasks) {
987
+ tasks = [];
988
+ this._tasks.set(full_key, tasks);
989
+ }
974
990
  tasks.push(task);
975
991
 
976
992
  return { task, tasks, cancelled };
@@ -1265,7 +1281,7 @@ Eventer.prototype._ensureNs = function (name) {
1265
1281
  */
1266
1282
  Eventer.prototype._execNsEvents = async function (name, key, params) {
1267
1283
  let list = this._dict[name][key];
1268
- const space_results = [];
1284
+ const name_results = [];
1269
1285
  const arr = []; // 存储需要移除的事件
1270
1286
 
1271
1287
  // 执行事件处理函数
@@ -1274,7 +1290,7 @@ Eventer.prototype._execNsEvents = async function (name, key, params) {
1274
1290
  let obj = list[i];
1275
1291
  // 执行事件处理函数
1276
1292
  let result = await obj.func.apply(obj, params);
1277
- space_results.push(result);
1293
+ name_results.push(result);
1278
1294
 
1279
1295
  // 处理执行次数限制
1280
1296
  if (obj.times >= 0) {
@@ -1286,7 +1302,7 @@ Eventer.prototype._execNsEvents = async function (name, key, params) {
1286
1302
  } catch (e) {
1287
1303
  // 记录错误但不中断执行
1288
1304
  this.log('error', `事件执行失败 [${name}:${key}] - ${list[i].name}`, e);
1289
- space_results.push({
1305
+ name_results.push({
1290
1306
  _error: true,
1291
1307
  error: e,
1292
1308
  handler: list[i].name
@@ -1687,7 +1703,7 @@ Eventer.prototype._addTargetEvents = function (full_from_event, to_events) {
1687
1703
  let target_events = Array.isArray(to_events) ? to_events : [to_events];
1688
1704
 
1689
1705
  for (let i = 0; i < target_events.length; i++) {
1690
- this._addSingleTargetEvent(full_from_event, target_events[i]);
1706
+ this._addTargetEvent(full_from_event, target_events[i]);
1691
1707
  }
1692
1708
  };
1693
1709
 
@@ -1981,7 +1997,7 @@ Eventer.prototype.onMany = function (events_map) {
1981
1997
  }
1982
1998
 
1983
1999
  for (let event_name in events_map) {
1984
- if (events_map.has_own_property(event_name)) {
2000
+ if (Object.prototype.hasOwnProperty.call(events_map, event_name)) {
1985
2001
  this.on(event_name, events_map[event_name]);
1986
2002
  }
1987
2003
  }
@@ -2035,10 +2051,11 @@ Eventer.prototype._sort = function (events) {
2035
2051
  * @private
2036
2052
  */
2037
2053
  Eventer.prototype._runMiddleware = async function (type, ctx) {
2038
- if (!this._middleware || this._middleware.length === 0) return;
2054
+ if (!this._middleware || !this._middleware[type] || this._middleware[type].length === 0) return;
2039
2055
 
2040
- for (let i = 0; i < this._middleware.length; i++) {
2041
- await this._executeSingleMiddleware(this._middleware[i], type, ctx, i);
2056
+ const mwList = this._middleware[type];
2057
+ for (let i = 0; i < mwList.length; i++) {
2058
+ await this._execMiddleware(mwList[i], type, ctx, i);
2042
2059
  // 如果上下文被取消,则停止执行
2043
2060
  if (ctx.cancelled) break;
2044
2061
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mm_expand",
3
- "version": "2.4.0",
3
+ "version": "2.4.2",
4
4
  "description": "超级美眉原型函数扩展模块 - 增强的字符串、数组、对象、日期操作,具备错误预防功能并简化业务逻辑",
5
5
  "main": "index.js",
6
6
  "scripts": {