await-num-q 1.0.2 → 1.1.3

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/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export type RunFunBoj = {
2
- status: "wait" | "ing" | "end";
2
+ status: "wait" | "ing" | "end" | "fail";
3
3
  target: Function;
4
4
  callback?: Function;
5
5
  err?: Function;
@@ -27,6 +27,11 @@ export declare class asyncQueue {
27
27
  * @returns 添加成功与否
28
28
  */
29
29
  run(f?: Function, callback?: Function, err?: Function): Promise<void>;
30
+ /**
31
+ * 获取所有的 任务
32
+ * @returns
33
+ */
34
+ getTasks(): RunFunBoj[];
30
35
  /**
31
36
  * 异步运行并得到返回值
32
37
  * @param fun 目标函数
@@ -34,3 +39,13 @@ export declare class asyncQueue {
34
39
  */
35
40
  wait(fun: (...arg: any) => any): Promise<any>;
36
41
  }
42
+ /**
43
+ * 在某个异步请求 参数相同 返回的值相同
44
+ * 并且在同一时间段 会发送多个亲求的场景
45
+ * 压缩正在进行的异步请求 为一个
46
+ * 避免同时条用多个请求导致后续请求 挂起
47
+ * @param asyncFun 异步函数
48
+ * @param param 函数传参 必须传入支持序列化的
49
+ * @returns
50
+ */
51
+ export declare function MergeAsync<T extends (...args: any) => Promise<any>>(asyncFun: T, ...param: Parameters<T>): Promise<ReturnType<T>>;
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
21
21
  };
22
22
  var _asyncQueue_Queue, _asyncQueue_runNum, _asyncQueue_maxNum;
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.asyncQueue = void 0;
24
+ exports.MergeAsync = exports.asyncQueue = void 0;
25
25
  class asyncQueue {
26
26
  constructor(max) {
27
27
  _asyncQueue_Queue.set(this, []);
@@ -46,7 +46,7 @@ class asyncQueue {
46
46
  status: "wait",
47
47
  target: f,
48
48
  callback,
49
- err
49
+ err,
50
50
  };
51
51
  __classPrivateFieldGet(this, _asyncQueue_Queue, "f").push(funObj);
52
52
  this.clear();
@@ -56,7 +56,7 @@ class asyncQueue {
56
56
  * 清除运行完成的任务
57
57
  */
58
58
  clear() {
59
- __classPrivateFieldSet(this, _asyncQueue_Queue, __classPrivateFieldGet(this, _asyncQueue_Queue, "f").filter(item => item.status !== 'end'), "f");
59
+ __classPrivateFieldSet(this, _asyncQueue_Queue, __classPrivateFieldGet(this, _asyncQueue_Queue, "f").filter((item) => item.status !== "end"), "f");
60
60
  }
61
61
  /**
62
62
  * 添加并运行任务 若是没有传入函数 运行 之前传入的任务
@@ -76,7 +76,7 @@ class asyncQueue {
76
76
  }
77
77
  let fun = null;
78
78
  for (let f of __classPrivateFieldGet(this, _asyncQueue_Queue, "f")) {
79
- if (f.status == 'wait') {
79
+ if (f.status == "wait") {
80
80
  fun = f;
81
81
  break;
82
82
  }
@@ -84,26 +84,34 @@ class asyncQueue {
84
84
  if (fun) {
85
85
  let data = null;
86
86
  try {
87
- fun.status = 'ing';
87
+ fun.status = "ing";
88
88
  __classPrivateFieldSet(this, _asyncQueue_runNum, (_a = __classPrivateFieldGet(this, _asyncQueue_runNum, "f"), _a++, _a), "f");
89
89
  data = yield fun.target();
90
90
  if (fun.callback instanceof Function) {
91
91
  fun.callback(data);
92
92
  }
93
+ fun.status = "end";
93
94
  }
94
95
  catch (_c) {
95
96
  if (fun.err instanceof Function) {
96
97
  fun.err(data);
97
98
  }
99
+ fun.status = "fail";
98
100
  }
99
101
  finally {
100
102
  __classPrivateFieldSet(this, _asyncQueue_runNum, (_b = __classPrivateFieldGet(this, _asyncQueue_runNum, "f"), _b--, _b), "f");
101
- fun.status = 'end';
102
103
  this.run();
103
104
  }
104
105
  }
105
106
  });
106
107
  }
108
+ /**
109
+ * 获取所有的 任务
110
+ * @returns
111
+ */
112
+ getTasks() {
113
+ return __classPrivateFieldGet(this, _asyncQueue_Queue, "f");
114
+ }
107
115
  /**
108
116
  * 异步运行并得到返回值
109
117
  * @param fun 目标函数
@@ -119,4 +127,26 @@ class asyncQueue {
119
127
  }
120
128
  exports.asyncQueue = asyncQueue;
121
129
  _asyncQueue_Queue = new WeakMap(), _asyncQueue_runNum = new WeakMap(), _asyncQueue_maxNum = new WeakMap();
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsTUFBYSxVQUFVO0lBSW5CLFlBQVksR0FBWTtRQUh4Qiw0QkFBc0IsRUFBRSxFQUFBO1FBQ3hCLDZCQUFVLENBQUMsRUFBQTtRQUNYLDZCQUFVLENBQUMsRUFBQTtRQUVQLElBQUksR0FBRyxFQUFFLENBQUM7WUFDTix1QkFBQSxJQUFJLHNCQUFXLEdBQUcsTUFBQSxDQUFBO1FBQ3RCLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLENBQVcsRUFBRSxRQUFtQixFQUFFLEdBQWM7UUFDakQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQWM7WUFDcEIsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsQ0FBQztZQUNULFFBQVE7WUFDUixHQUFHO1NBQ04sQ0FBQTtRQUNELHVCQUFBLElBQUkseUJBQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ1osT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsdUJBQUEsSUFBSSxxQkFBVSx1QkFBQSxJQUFJLHlCQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBQSxDQUFBO0lBQ25FLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDRyxHQUFHLENBQUMsQ0FBWSxFQUFFLFFBQW1CLEVBQUUsR0FBYzs7O1lBQ3ZELElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBQy9CLENBQUM7WUFDRCxJQUFJLHVCQUFBLElBQUksMEJBQVEsSUFBSSx1QkFBQSxJQUFJLDBCQUFRLEVBQUUsQ0FBQztnQkFDL0IsT0FBTTtZQUNWLENBQUM7WUFDRCxJQUFJLEdBQUcsR0FBcUIsSUFBSSxDQUFBO1lBQ2hDLEtBQUssSUFBSSxDQUFDLElBQUksdUJBQUEsSUFBSSx5QkFBTyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDckIsR0FBRyxHQUFHLENBQUMsQ0FBQTtvQkFDUCxNQUFLO2dCQUNULENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDTixJQUFJLElBQUksR0FBUSxJQUFJLENBQUE7Z0JBQ3BCLElBQUksQ0FBQztvQkFDRCxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtvQkFDbEIsaURBQUEsQ0FBQSwwREFBWSxFQUFaLElBQWUsSUFBQSxDQUFBLE1BQUEsQ0FBQTtvQkFDZixJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUE7b0JBQ3pCLElBQUksR0FBRyxDQUFDLFFBQVEsWUFBWSxRQUFRLEVBQUUsQ0FBQzt3QkFDbkMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDdEIsQ0FBQztnQkFDTCxDQUFDO2dCQUFDLFdBQU0sQ0FBQztvQkFDTCxJQUFJLEdBQUcsQ0FBQyxHQUFHLFlBQVksUUFBUSxFQUFFLENBQUM7d0JBQzlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQ2pCLENBQUM7Z0JBQ0wsQ0FBQzt3QkFBUyxDQUFDO29CQUNQLGlEQUFBLENBQUEsMERBQVksRUFBWixJQUFlLElBQUEsQ0FBQSxNQUFBLENBQUE7b0JBQ2YsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7b0JBQ2xCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtnQkFDZCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDRyxJQUFJLENBQUMsR0FBeUI7O1lBQ2hDLE9BQU8sTUFBTSxJQUFJLE9BQU8sQ0FBeUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUMzQixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7S0FBQTtDQUNKO0FBM0ZELGdDQTJGQyJ9
130
+ const mergePromise = new WeakMap();
131
+ /**
132
+ * 在某个异步请求 参数相同 返回的值相同
133
+ * 并且在同一时间段 会发送多个亲求的场景
134
+ * 压缩正在进行的异步请求 为一个
135
+ * 避免同时条用多个请求导致后续请求 挂起
136
+ * @param asyncFun 异步函数
137
+ * @param param 函数传参 必须传入支持序列化的
138
+ * @returns
139
+ */
140
+ function MergeAsync(asyncFun, ...param) {
141
+ return __awaiter(this, void 0, void 0, function* () {
142
+ let key = JSON.stringify(param);
143
+ if (mergePromise.has(key)) {
144
+ return mergePromise.get(key);
145
+ }
146
+ let r = (yield asyncFun(...param));
147
+ mergePromise.delete(key);
148
+ return r;
149
+ });
150
+ }
151
+ exports.MergeAsync = MergeAsync;
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsTUFBYSxVQUFVO0lBSXJCLFlBQVksR0FBWTtRQUh4Qiw0QkFBc0IsRUFBRSxFQUFDO1FBQ3pCLDZCQUFVLENBQUMsRUFBQztRQUNaLDZCQUFVLENBQUMsRUFBQztRQUVWLElBQUksR0FBRyxFQUFFLENBQUM7WUFDUix1QkFBQSxJQUFJLHNCQUFXLEdBQUcsTUFBQSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLENBQVcsRUFBRSxRQUFtQixFQUFFLEdBQWM7UUFDbkQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUMzQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBYztZQUN0QixNQUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxDQUFDO1lBQ1QsUUFBUTtZQUNSLEdBQUc7U0FDSixDQUFDO1FBQ0YsdUJBQUEsSUFBSSx5QkFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCx1QkFBQSxJQUFJLHFCQUFVLHVCQUFBLElBQUkseUJBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQUEsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0csR0FBRyxDQUFDLENBQVksRUFBRSxRQUFtQixFQUFFLEdBQWM7OztZQUN6RCxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBQ0QsSUFBSSx1QkFBQSxJQUFJLDBCQUFRLElBQUksdUJBQUEsSUFBSSwwQkFBUSxFQUFFLENBQUM7Z0JBQ2pDLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxHQUFHLEdBQXFCLElBQUksQ0FBQztZQUNqQyxLQUFLLElBQUksQ0FBQyxJQUFJLHVCQUFBLElBQUkseUJBQU8sRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ3ZCLEdBQUcsR0FBRyxDQUFDLENBQUM7b0JBQ1IsTUFBTTtnQkFDUixDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUM7b0JBQ0gsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ25CLGlEQUFBLENBQUEsMERBQVksRUFBWixJQUFjLElBQUEsQ0FBQSxNQUFBLENBQUM7b0JBQ2YsSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUMxQixJQUFJLEdBQUcsQ0FBQyxRQUFRLFlBQVksUUFBUSxFQUFFLENBQUM7d0JBQ3JDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3JCLENBQUM7b0JBQ0QsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLENBQUM7Z0JBQUMsV0FBTSxDQUFDO29CQUNQLElBQUksR0FBRyxDQUFDLEdBQUcsWUFBWSxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEIsQ0FBQztvQkFDRCxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDdEIsQ0FBQzt3QkFBUyxDQUFDO29CQUNULGlEQUFBLENBQUEsMERBQVksRUFBWixJQUFjLElBQUEsQ0FBQSxNQUFBLENBQUM7b0JBQ2YsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNiLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztLQUFBO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sdUJBQUEsSUFBSSx5QkFBTyxDQUFBO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0csSUFBSSxDQUFDLEdBQXlCOztZQUNsQyxPQUFPLE1BQU0sSUFBSSxPQUFPLENBQXlCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUM1RCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7Q0FDRjtBQXBHRCxnQ0FvR0M7O0FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUVuQzs7Ozs7Ozs7R0FRRztBQUNILFNBQXNCLFVBQVUsQ0FDOUIsUUFBVyxFQUNYLEdBQUcsS0FBb0I7O1FBRXZCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFXLENBQUM7UUFDMUMsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBa0IsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFrQixDQUFDO1FBQ3BELFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0NBQUE7QUFYRCxnQ0FXQyJ9
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
- {
2
- "name": "await-num-q",
3
- "version": "1.0.2",
4
- "description": "一个用于 处理 指定并行异步任务数量的 队列",
5
- "keywords":["q","await","async","队列","异步","并行"],
6
- "main": "dist/index.js",
7
- "scripts": {
8
- "test": "echo \"Error: no test specified\" && exit 1"
9
- },
10
- "types": "dist/index.d.ts",
11
- "author": "xxl.nice@foxmail.com",
12
- "license": "ISC"
13
- }
1
+ {
2
+ "name": "await-num-q",
3
+ "version": "1.1.3",
4
+ "description": "一个用于 处理 指定并行异步任务数量的 队列",
5
+ "keywords":["q","await","async","队列","异步","并行"],
6
+ "main": "dist/index.js",
7
+ "scripts": {
8
+ "test": "echo \"Error: no test specified\" && exit 1"
9
+ },
10
+ "types": "dist/index.d.ts",
11
+ "author": "xxl.nice@foxmail.com",
12
+ "license": "ISC"
13
+ }
package/tsconfig.json CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  /* Language and Environment */
14
14
  "target": "ES2015", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
15
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
15
+ // "lib": ["DOM","Decorators"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16
16
  // "jsx": "preserve", /* Specify what JSX code is generated. */
17
17
  // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
18
18
  // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */