mm_expand 1.7.6 → 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.
Files changed (3) hide show
  1. package/lib/eventer.js +36 -4
  2. package/package.json +1 -1
  3. package/test.js +69 -51
package/lib/eventer.js CHANGED
@@ -1,3 +1,5 @@
1
+ const util = require('util');
2
+
1
3
  class Eventer {
2
4
  constructor() {
3
5
  this.dict = {};
@@ -9,8 +11,10 @@ class Eventer {
9
11
  * @param {String} key 事件关键
10
12
  * @param {Object} func 触发函数
11
13
  * @param {String} name 增加名称,方便删除,当出现相同名称时会被覆盖
14
+ * @param {Number} times 执行次数 -1为无限次执行
15
+ * @returns {Number} 返回事件索引位置
12
16
  */
13
- Eventer.prototype.on = function(key, func, name) {
17
+ Eventer.prototype.on = function(key, func, name, times = -1) {
14
18
  var events = this.dict;
15
19
  if (!events[key]) {
16
20
  events[key] = [];
@@ -20,7 +24,8 @@ Eventer.prototype.on = function(key, func, name) {
20
24
  }
21
25
  var obj = {
22
26
  name,
23
- func
27
+ func,
28
+ times
24
29
  };
25
30
  var o = events[key].getObj({
26
31
  name
@@ -33,23 +38,50 @@ Eventer.prototype.on = function(key, func, name) {
33
38
  return events[key].length - 1;
34
39
  }
35
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
+
36
52
  /**
37
53
  * 执行事件
38
54
  * @param {String} key 事件关键
39
55
  * @param {Object} params 传递参数
40
56
  */
41
- Eventer.prototype.run = function(key, ...params) {
57
+ Eventer.prototype.run = async function(key, ...params) {
42
58
  var events = this.dict;
43
59
  var list = events[key];
44
60
  if (list) {
61
+ var arr = [];
45
62
  for (var i = 0; i < list.length; i++) {
46
63
  try {
47
- list[i].func(...params);
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
+ }
48
75
  } catch (e) {
49
76
  $.log.error("执行事件失败!", e);
50
77
  //TODO handle the exception
51
78
  }
52
79
  }
80
+ for (var i = 0; i < arr.length; i++) {
81
+ list.del({
82
+ name: arr[i]
83
+ });
84
+ }
53
85
  }
54
86
  }
55
87
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mm_expand",
3
- "version": "1.7.6",
3
+ "version": "1.7.7",
4
4
  "description": "这是超级美眉原型函数拓展模块,更有利于对string、array、object的操作,避免出错,简化业务逻辑。",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/test.js CHANGED
@@ -1,58 +1,76 @@
1
1
  require('./index.js');
2
2
 
3
-
4
- // 创建事件监听
5
- // 用自定义名称方式创建
6
- $.eventer.on("mysql_add", function(json) {
7
- console.log("收到1", json);
8
- }, "test");
9
-
10
- // 用函数名方式创建
11
- $.eventer.on("mysql_add", function test2(json) {
12
- console.log("收到2", json);
13
- });
14
-
15
- // 用预先定义好的名称创建
16
- var test3 = function(json) {
17
- console.log("收到3", json);
18
- }
19
- $.eventer.on("mysql_add", test3);
20
-
21
- // 用匿名方式创建,此创建法会导致被其他注册函数覆盖,不建议使用
22
- $.eventer.on("mysql_add", function(json) {
23
- console.log("收到", json);
24
- });
25
-
26
- // 用对象属性函数创建,此创建法如果没有声明函数,将会匿名创建
27
- // var oo = {};
28
- // oo.test4 = function (json) {
29
- // console.log("收到4", json);
30
- // }
31
- // $.eventer.on("mysql_add", oo.test4);
32
-
33
- var param = {
34
- table: "user_account",
35
- query: {},
36
- body: {
37
- "name": "张三丰",
38
- "age": 24
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);
39
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);
40
72
  }
41
-
42
- // 执行事件
43
- $.eventer.run("mysql_add", param);
44
-
45
- // 查看有哪些事件
46
- console.log("事件集", $.eventer.dict);
47
-
48
- // 移除触发事件
49
- $.eventer.del("mysql_add", "test");
50
- console.log("事件集", $.eventer.dict);
51
-
52
- // 移除事件集
53
- $.eventer.del("mysql_add");
54
- console.log("事件集", $.eventer.dict);
55
-
73
+ test();
56
74
  // var n = 1725059734;
57
75
  // console.log(n.toTimeStr('yyyy-MM-dd hh:mm:ss'));
58
76