await-num-q 1.0.1 → 1.1.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.
package/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # await-num-q 限数阀
2
+
3
+ ## 介绍
4
+ 这是一个用于解决异步任务数量太大需要限制异步任务数量的 库,比如浏览器端 一次性发送很多的请求会导致请求挂起,例如在有大量图片加载时 网络不太好会导致后续其他的接口请求挂起得不到反馈,这时需要一个工具来解决同时请求图片的数量不得大于某个值,这样后续的接口请求才能正常的发送。于是此库便诞生了
5
+ ## 下载
6
+ ```sh
7
+ npm i await-num-q
8
+ # or
9
+ pnpm i await-num-q
10
+ # or
11
+ yarn i await-num-q
12
+ ```
13
+
14
+ ## 使用
15
+
16
+ > 导入
17
+ ```js
18
+ import { asyncQueue } from 'await-num-q'
19
+ ```
20
+ > 初始化队列
21
+ ```js
22
+ let q = new asyncQueue(3)// 3 表示能够同时在当前队列执行的任务数量
23
+ ```
24
+ > 执行
25
+ ```js
26
+ async function test(){
27
+ async function _get(){}
28
+ let data = await q.wait(_get) // 这样就能拿到请求的数据 且不会超过指定数量
29
+ }
30
+ ```
31
+ ## api列表
32
+
33
+ ```ts
34
+ export type RunFunBoj = {
35
+ status: "wait" | "ing" | "end";
36
+ target: Function;
37
+ callback?: Function;
38
+ err?: Function;
39
+ };
40
+ export declare class asyncQueue {
41
+ #private;
42
+ constructor(max?: number);
43
+ /**
44
+ * 添加任务
45
+ * @param f 目标函数
46
+ * @param callback 成功回调函数
47
+ * @param err 错误回调函数
48
+ * @returns 添加成功与否
49
+ */
50
+ push(f: Function, callback?: Function, err?: Function): boolean;
51
+ /**
52
+ * 清除运行完成的任务
53
+ */
54
+ clear(): void;
55
+ /**
56
+ * 添加并运行任务 若是没有传入函数 运行 之前传入的任务
57
+ * @param f 目标函数
58
+ * @param callback 成功回调函数
59
+ * @param err 错误回调函数
60
+ * @returns 添加成功与否
61
+ */
62
+ run(f?: Function, callback?: Function, err?: Function): Promise<void>;
63
+ /**
64
+ * 异步运行并得到返回值
65
+ * @param fun 目标函数
66
+ * @returns
67
+ */
68
+ wait(fun: (...arg: any) => any): Promise<any>;
69
+ }
70
+ ```
package/dist/index.d.ts CHANGED
@@ -34,3 +34,13 @@ export declare class asyncQueue {
34
34
  */
35
35
  wait(fun: (...arg: any) => any): Promise<any>;
36
36
  }
37
+ /**
38
+ * 在某个异步请求 参数相同 返回的值相同
39
+ * 并且在同一时间段 会发送多个亲求的场景
40
+ * 压缩正在进行的异步请求 为一个
41
+ * 避免同时条用多个请求导致后续请求 挂起
42
+ * @param asyncFun 异步函数
43
+ * @param param 函数传参 必须传入支持序列化的
44
+ * @returns
45
+ */
46
+ 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,14 +76,15 @@ 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
+ break;
81
82
  }
82
83
  }
83
84
  if (fun) {
84
85
  let data = null;
85
86
  try {
86
- fun.status = 'ing';
87
+ fun.status = "ing";
87
88
  __classPrivateFieldSet(this, _asyncQueue_runNum, (_a = __classPrivateFieldGet(this, _asyncQueue_runNum, "f"), _a++, _a), "f");
88
89
  data = yield fun.target();
89
90
  if (fun.callback instanceof Function) {
@@ -97,7 +98,7 @@ class asyncQueue {
97
98
  }
98
99
  finally {
99
100
  __classPrivateFieldSet(this, _asyncQueue_runNum, (_b = __classPrivateFieldGet(this, _asyncQueue_runNum, "f"), _b--, _b), "f");
100
- fun.status = 'end';
101
+ fun.status = "end";
101
102
  this.run();
102
103
  }
103
104
  }
@@ -118,4 +119,26 @@ class asyncQueue {
118
119
  }
119
120
  exports.asyncQueue = asyncQueue;
120
121
  _asyncQueue_Queue = new WeakMap(), _asyncQueue_runNum = new WeakMap(), _asyncQueue_maxNum = new WeakMap();
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsTUFBYSxVQUFVO0lBSW5CLFlBQVksR0FBWTtRQUh4Qiw0QkFBc0IsRUFBRSxFQUFBO1FBQ3hCLDZCQUFVLENBQUMsRUFBQTtRQUNYLDZCQUFVLENBQUMsRUFBQTtRQUVQLElBQUksR0FBRyxFQUFFLENBQUM7WUFDTix1QkFBQSxJQUFJLHNCQUFXLEdBQUcsTUFBQSxDQUFBO1FBQ3RCLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLENBQVcsRUFBRSxRQUFtQixFQUFFLEdBQWM7UUFDakQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQWM7WUFDcEIsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsQ0FBQztZQUNULFFBQVE7WUFDUixHQUFHO1NBQ04sQ0FBQTtRQUNELHVCQUFBLElBQUkseUJBQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ1osT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsdUJBQUEsSUFBSSxxQkFBVSx1QkFBQSxJQUFJLHlCQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBQSxDQUFBO0lBQ25FLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDRyxHQUFHLENBQUMsQ0FBWSxFQUFFLFFBQW1CLEVBQUUsR0FBYzs7O1lBQ3ZELElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBQy9CLENBQUM7WUFDRCxJQUFJLHVCQUFBLElBQUksMEJBQVEsSUFBSSx1QkFBQSxJQUFJLDBCQUFRLEVBQUUsQ0FBQztnQkFDL0IsT0FBTTtZQUNWLENBQUM7WUFDRCxJQUFJLEdBQUcsR0FBcUIsSUFBSSxDQUFBO1lBQ2hDLEtBQUssSUFBSSxDQUFDLElBQUksdUJBQUEsSUFBSSx5QkFBTyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDckIsR0FBRyxHQUFHLENBQUMsQ0FBQTtnQkFDWCxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ04sSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFBO2dCQUNwQixJQUFJLENBQUM7b0JBQ0QsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7b0JBQ2xCLGlEQUFBLENBQUEsMERBQVksRUFBWixJQUFlLElBQUEsQ0FBQSxNQUFBLENBQUE7b0JBQ2YsSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFBO29CQUN6QixJQUFJLEdBQUcsQ0FBQyxRQUFRLFlBQVksUUFBUSxFQUFFLENBQUM7d0JBQ25DLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQ3RCLENBQUM7Z0JBQ0wsQ0FBQztnQkFBQyxXQUFNLENBQUM7b0JBQ0wsSUFBSSxHQUFHLENBQUMsR0FBRyxZQUFZLFFBQVEsRUFBRSxDQUFDO3dCQUM5QixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUNqQixDQUFDO2dCQUNMLENBQUM7d0JBQVMsQ0FBQztvQkFDUCxpREFBQSxDQUFBLDBEQUFZLEVBQVosSUFBZSxJQUFBLENBQUEsTUFBQSxDQUFBO29CQUNmLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO29CQUNsQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7Z0JBQ2QsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0csSUFBSSxDQUFDLEdBQXlCOztZQUNoQyxPQUFPLE1BQU0sSUFBSSxPQUFPLENBQXlCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUMxRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDM0IsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDO0tBQUE7Q0FDSjtBQTFGRCxnQ0EwRkMifQ==
122
+ const mergePromise = new WeakMap();
123
+ /**
124
+ * 在某个异步请求 参数相同 返回的值相同
125
+ * 并且在同一时间段 会发送多个亲求的场景
126
+ * 压缩正在进行的异步请求 为一个
127
+ * 避免同时条用多个请求导致后续请求 挂起
128
+ * @param asyncFun 异步函数
129
+ * @param param 函数传参 必须传入支持序列化的
130
+ * @returns
131
+ */
132
+ function MergeAsync(asyncFun, ...param) {
133
+ return __awaiter(this, void 0, void 0, function* () {
134
+ let key = JSON.stringify(param);
135
+ if (mergePromise.has(key)) {
136
+ return mergePromise.get(key);
137
+ }
138
+ let r = (yield asyncFun(...param));
139
+ mergePromise.delete(key);
140
+ return r;
141
+ });
142
+ }
143
+ exports.MergeAsync = MergeAsync;
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsTUFBYSxVQUFVO0lBSXJCLFlBQVksR0FBWTtRQUh4Qiw0QkFBc0IsRUFBRSxFQUFDO1FBQ3pCLDZCQUFVLENBQUMsRUFBQztRQUNaLDZCQUFVLENBQUMsRUFBQztRQUVWLElBQUksR0FBRyxFQUFFLENBQUM7WUFDUix1QkFBQSxJQUFJLHNCQUFXLEdBQUcsTUFBQSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLENBQVcsRUFBRSxRQUFtQixFQUFFLEdBQWM7UUFDbkQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUMzQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBYztZQUN0QixNQUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxDQUFDO1lBQ1QsUUFBUTtZQUNSLEdBQUc7U0FDSixDQUFDO1FBQ0YsdUJBQUEsSUFBSSx5QkFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCx1QkFBQSxJQUFJLHFCQUFVLHVCQUFBLElBQUkseUJBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQUEsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0csR0FBRyxDQUFDLENBQVksRUFBRSxRQUFtQixFQUFFLEdBQWM7OztZQUN6RCxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNOLElBQUksQ0FB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
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
- {
2
- "name": "await-num-q",
3
- "version": "1.0.1",
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.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
+ }
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. */