mm_expand 1.7.5 → 1.7.7

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.
package/index.js CHANGED
@@ -41,8 +41,10 @@ const {
41
41
  createDecipheriv
42
42
  } = require('crypto');
43
43
 
44
- const Base = require('./base.js');
45
- const Lang = require('./lang.js');
44
+ var Base = require('./lib/base.js');
45
+ var Lang = require('./lib/lang.js');
46
+ var Eventer = require('./lib/eventer.js');
47
+
46
48
 
47
49
  /**
48
50
  * @type {String}
@@ -486,61 +488,6 @@ function keys(obj, file) {
486
488
  }
487
489
 
488
490
 
489
- class Eventer {
490
- constructor() {
491
- this.dict = {};
492
- }
493
- }
494
-
495
- /**
496
- * 监听事件
497
- * @param {String} key 事件关键
498
- * @param {Object} func 触发函数
499
- */
500
- Eventer.prototype.on = function(key, func) {
501
- var events = this.dict;
502
- if (!events[key]) {
503
- events[key] = [];
504
- }
505
- events[key].push(func);
506
- return events[key].length - 1;
507
- }
508
-
509
- /**
510
- * 执行事件
511
- * @param {String} key 事件关键
512
- * @param {Object} params 传递参数
513
- */
514
- Eventer.prototype.run = function(key, ...params) {
515
- var events = this.dict;
516
- var list = events[key];
517
- if (list) {
518
- for (var i = 0; i < list.length; i++) {
519
- try {
520
- list[i](...params);
521
- } catch (e) {
522
- console.error(e);
523
- //TODO handle the exception
524
- }
525
- }
526
- }
527
- }
528
-
529
- /**
530
- * 删除事件
531
- * @param {String} key 事件关键
532
- * @param {Number} index 事件集索引
533
- */
534
- Eventer.prototype.del = function(key, index = -1) {
535
- var events = this.dict;
536
- if (index > -1) {
537
- var list = events[key];
538
- list.splice(index, 1);
539
- } else {
540
- delete events[key];
541
- }
542
- }
543
-
544
491
  /**
545
492
  * @namespace
546
493
  * @property {Object} pool 数据连接池, 用于存储有关数据库的操作类
@@ -571,7 +518,7 @@ if (typeof($) === "undefined") {
571
518
  Base,
572
519
  // 语言包类
573
520
  Lang,
574
- eventer: new Eventer,
521
+ eventer: new Eventer(),
575
522
  // 数据连接池, 用于存储有关数据库的操作类
576
523
  pool: {},
577
524
  // 任务池, 用于存储定时任务操作类
@@ -2940,6 +2887,7 @@ if (typeof($) === "undefined") {
2940
2887
  })();
2941
2888
 
2942
2889
  module.exports = {
2890
+ Eventer,
2943
2891
  Lang,
2944
2892
  Base
2945
2893
  };
package/lib/eventer.js ADDED
@@ -0,0 +1,109 @@
1
+ const util = require('util');
2
+
3
+ class Eventer {
4
+ constructor() {
5
+ this.dict = {};
6
+ }
7
+ }
8
+
9
+ /**
10
+ * 监听事件
11
+ * @param {String} key 事件关键
12
+ * @param {Object} func 触发函数
13
+ * @param {String} name 增加名称,方便删除,当出现相同名称时会被覆盖
14
+ * @param {Number} times 执行次数 -1为无限次执行
15
+ * @returns {Number} 返回事件索引位置
16
+ */
17
+ Eventer.prototype.on = function(key, func, name, times = -1) {
18
+ var events = this.dict;
19
+ if (!events[key]) {
20
+ events[key] = [];
21
+ }
22
+ if (!name) {
23
+ name = func.name || 'default';
24
+ }
25
+ var obj = {
26
+ name,
27
+ func,
28
+ times
29
+ };
30
+ var o = events[key].getObj({
31
+ name
32
+ });
33
+ if (o) {
34
+ Object.assign(o, obj);
35
+ } else {
36
+ events[key].push(obj);
37
+ }
38
+ return events[key].length - 1;
39
+ }
40
+
41
+ /**
42
+ * 监听事件(仅执行一次)
43
+ * @param {String} key 事件关键
44
+ * @param {Object} func 触发函数
45
+ * @param {String} name 增加名称,方便删除,当出现相同名称时会被覆盖
46
+ * @returns {Number} 返回事件索引位置
47
+ */
48
+ Eventer.prototype.once = function(key, func, name) {
49
+ return this.on(key, func, name, 1);
50
+ }
51
+
52
+ /**
53
+ * 执行事件
54
+ * @param {String} key 事件关键
55
+ * @param {Object} params 传递参数
56
+ */
57
+ Eventer.prototype.run = async function(key, ...params) {
58
+ var events = this.dict;
59
+ var list = events[key];
60
+ if (list) {
61
+ var arr = [];
62
+ for (var i = 0; i < list.length; i++) {
63
+ try {
64
+ var o = list[i];
65
+ var ret = await o.func(...params);
66
+ if (util.types.isPromise(ret)) {
67
+ ret = await ret;
68
+ }
69
+ if (o.times >= 0) {
70
+ o.times--;
71
+ if (o.times <= 0) {
72
+ arr.push(o.name);
73
+ }
74
+ }
75
+ } catch (e) {
76
+ $.log.error("执行事件失败!", e);
77
+ //TODO handle the exception
78
+ }
79
+ }
80
+ for (var i = 0; i < arr.length; i++) {
81
+ list.del({
82
+ name: arr[i]
83
+ });
84
+ }
85
+ }
86
+ }
87
+
88
+ /**
89
+ * 删除事件
90
+ * @param {String} key 事件关键
91
+ * @param {Number} indexOrName 事件集索引或名称
92
+ */
93
+ Eventer.prototype.del = function(key, indexOrName) {
94
+ var events = this.dict;
95
+ if (indexOrName) {
96
+ var list = events[key];
97
+ if (typeof(indexOrName) == "number") {
98
+ list.splice(indexOrName, 1);
99
+ } else {
100
+ list.del({
101
+ name: indexOrName
102
+ });
103
+ }
104
+ } else {
105
+ delete events[key];
106
+ }
107
+ }
108
+
109
+ module.exports = Eventer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mm_expand",
3
- "version": "1.7.5",
3
+ "version": "1.7.7",
4
4
  "description": "这是超级美眉原型函数拓展模块,更有利于对string、array、object的操作,避免出错,简化业务逻辑。",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/test.js CHANGED
@@ -1,6 +1,76 @@
1
1
  require('./index.js');
2
2
 
3
-
3
+ async function test() {
4
+
5
+ // 创建事件监听
6
+ // 用自定义名称方式创建
7
+ $.eventer.on("mysql_add", function(json) {
8
+ console.log("收到1", json);
9
+ }, "test");
10
+
11
+ // 用函数名方式创建
12
+ $.eventer.on("mysql_add", function test2(json) {
13
+ console.log("收到2", json);
14
+ });
15
+
16
+ // 用预先定义好的名称创建
17
+ var test3 = function(json) {
18
+ console.log("收到3", json);
19
+ }
20
+ $.eventer.on("mysql_add", test3);
21
+
22
+ // 用匿名方式创建,此创建法会导致被其他注册函数覆盖,不建议使用
23
+ $.eventer.on("mysql_add", function(json) {
24
+ console.log("收到", json);
25
+ });
26
+
27
+ // 用匿名方式创建,此创建法会导致被其他注册函数覆盖,不建议使用
28
+ $.eventer.once("mysql_add", function one(json) {
29
+ console.log("收到1次", json);
30
+ });
31
+
32
+ // 用匿名方式创建,此创建法会导致被其他注册函数覆盖,不建议使用
33
+ $.eventer.on("mysql_add", function two(json) {
34
+ console.log("收到2次", json);
35
+ }, null, 2);
36
+ // 用对象属性函数创建,此创建法如果没有声明函数,将会匿名创建
37
+ // var oo = {};
38
+ // oo.test4 = function (json) {
39
+ // console.log("收到4", json);
40
+ // }
41
+ // $.eventer.on("mysql_add", oo.test4);
42
+
43
+ var param = {
44
+ table: "user_account",
45
+ query: {},
46
+ body: {
47
+ "name": "张三丰",
48
+ "age": 24
49
+ }
50
+ }
51
+
52
+ // 查看有哪些事件
53
+ console.log("事件集", $.eventer.dict);
54
+
55
+ // 执行事件
56
+ await $.eventer.run("mysql_add", param);
57
+ // 执行事件
58
+ await $.eventer.run("mysql_add", param);
59
+ // 执行事件
60
+ await $.eventer.run("mysql_add", param);
61
+
62
+ // 查看有哪些事件
63
+ console.log("事件集", $.eventer.dict);
64
+
65
+ // 移除触发事件
66
+ $.eventer.del("mysql_add", "test");
67
+ console.log("事件集", $.eventer.dict);
68
+
69
+ // 移除事件集
70
+ $.eventer.del("mysql_add");
71
+ console.log("事件集", $.eventer.dict);
72
+ }
73
+ test();
4
74
  // var n = 1725059734;
5
75
  // console.log(n.toTimeStr('yyyy-MM-dd hh:mm:ss'));
6
76
 
@@ -41,17 +111,19 @@ require('./index.js');
41
111
  // var bl = "44142319910401801T".checkFormat('idcard');
42
112
  // console.log("校验格式", bl);
43
113
 
44
- var now = new Date();
45
- var str = now;
46
- console.log("时间", str);
47
- console.log("时间", str.toString());
48
- console.log("当前", new Date(str.toString()).toStr("yyyy-MM-dd hh:mm:ss"));
49
-
50
- var time = now.toStr('yyyy-MM-dd hh:mm:ss');
51
- console.log("当前", time);
52
- console.log("时间", time.toTime().toStr("yyyy-MM-dd hh:mm:ss"));
53
- console.log("当前", new Date(time).toStr("yyyy-MM-dd hh:mm:ss"));
54
- console.log(now.toString(), now.toString().toTime().toStr('yyyy-MM-dd hh:mm:ss'));
114
+ // var now = new Date();
115
+ // var str = now;
116
+ // console.log("时间", str);
117
+ // console.log("时间", str.toString());
118
+ // console.log("当前", str.toStr("yyyy-MM-dd hh:mm:ss"));
119
+ // console.log("当前", new Date(str.toString()).toStr("yyyy-MM-dd hh:mm:ss"));
120
+ // console.log("当前", str.toStr("yyyy-MM-ddThh:mm:ss.000Z"));
121
+
122
+ // var time = now.toStr('yyyy-MM-dd hh:mm:ss');
123
+ // console.log("当前", time);
124
+ // console.log("时间", time.toTime().toStr("yyyy-MM-dd hh:mm:ss"));
125
+ // console.log("当前", new Date(time).toStr("yyyy-MM-dd hh:mm:ss"));
126
+ // console.log(now.toString(), now.toString().toTime().toStr('yyyy-MM-dd hh:mm:ss'));
55
127
 
56
128
  // var time = now.toStr("yyyy-MM-ddThh:mm");
57
129
  // console.log("当前", time);
File without changes
File without changes