await-num-q 1.2.6 → 1.3.0
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/.eslintrc.json +33 -0
- package/README.md +75 -20
- package/dist/index.d.ts +12 -10
- package/dist/index.js +23 -11
- package/package.json +32 -13
package/.eslintrc.json
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"env": {
|
3
|
+
"browser": true,
|
4
|
+
"es2021": true
|
5
|
+
},
|
6
|
+
"extends": [
|
7
|
+
"eslint:recommended",
|
8
|
+
"plugin:@typescript-eslint/recommended"
|
9
|
+
],
|
10
|
+
"parser": "@typescript-eslint/parser",
|
11
|
+
"parserOptions": {
|
12
|
+
"ecmaVersion": 2020,
|
13
|
+
"sourceType": "module"
|
14
|
+
},
|
15
|
+
"plugins": ["@typescript-eslint"],
|
16
|
+
"rules": {
|
17
|
+
// 基础规则
|
18
|
+
"no-console": ["warn"],
|
19
|
+
"no-debugger": ["error"],
|
20
|
+
|
21
|
+
// TypeScript 特定规则
|
22
|
+
"@typescript-eslint/no-explicit-any": ["off"],
|
23
|
+
"@typescript-eslint/no-inferrable-types": ["warn", { "ignoreParameters": true }],
|
24
|
+
"@typescript-eslint/no-non-null-assertion": ["error"],
|
25
|
+
"semi": ["error", "always"],
|
26
|
+
"comma-dangle": ["error", "always-multiline"],
|
27
|
+
"comma-spacing": ["error", { "before": false, "after": true }],
|
28
|
+
"space-infix-ops": ["error"],
|
29
|
+
"keyword-spacing": ["error"],
|
30
|
+
"object-curly-spacing": ["error", "always"],
|
31
|
+
"array-bracket-spacing": ["error", "never"]
|
32
|
+
}
|
33
|
+
}
|
package/README.md
CHANGED
@@ -1,11 +1,19 @@
|
|
1
|
+
- [await-num-q 限数阀](#await-num-q-限数阀)
|
2
|
+
- [场景](#场景)
|
3
|
+
- [介绍](#介绍)
|
4
|
+
- [下载](#下载)
|
5
|
+
- [使用](#使用)
|
6
|
+
- [api列表](#api列表)
|
7
|
+
- [仓库地址](#仓库地址)
|
8
|
+
|
1
9
|
# await-num-q 限数阀
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
10
|
+
|
11
|
+
不知道大家有没有遇到这种场景,在上传文件分片的时候很多分片一起上传,导致浏览器对单个域名的请求过多其他的请求全都挂起了,页面直接其他请求无响应但是 页面又不可以刷新。这个时候要是能有一个工具帮我们发送请求并且控制并发数量的话就不会有这个限制了,并且还能够失败重试。或者是在一个列表上单个位置可能需要请求多个相同的接口,其实可以等待之前的接口结束直接使用,但是需要做的判断就比较多,不如我直接在这个接口返回数据的过程中丢弃其他相同的请求只用等待这一个。
|
12
|
+
|
13
|
+
## 场景
|
14
|
+
在多个不同请求的时候需要限制并发数量使用 asyncQueue
|
15
|
+
|
16
|
+
在多个参数相同请求且几乎同一时刻发出的时候需要做到合并,使用MergeAsync
|
9
17
|
## 介绍
|
10
18
|
这是一个用于解决异步任务数量太大需要`限制异步任务数量的库`,比如浏览器端 一次性发送很多的请求会导致请求挂起,例如在有大量图片加载时 网络不太好会导致后续其他的接口请求挂起得不到反馈,这时需要一个工具来解决同时请求图片的数量不得大于某个值,这样后续的接口请求才能正常的发送。于是此库便诞生了
|
11
19
|
## 下载
|
@@ -21,18 +29,57 @@ yarn i await-num-q
|
|
21
29
|
|
22
30
|
> 导入
|
23
31
|
```js
|
24
|
-
import { asyncQueue } from 'await-num-q'
|
32
|
+
import { asyncQueue, MergeAsync } from 'await-num-q'
|
25
33
|
```
|
26
34
|
> 初始化队列
|
27
35
|
```js
|
28
|
-
|
36
|
+
/**
|
37
|
+
*
|
38
|
+
* 异步参数对象
|
39
|
+
* @property max 最大并发数
|
40
|
+
* @property retry 失败重试次数
|
41
|
+
* @property endCallback 队列结束回调函数
|
42
|
+
*/
|
43
|
+
// export type AsyncParams = {
|
44
|
+
// max?: number;
|
45
|
+
// retry?: number;
|
46
|
+
// endCallback?: () => void;
|
47
|
+
// };
|
48
|
+
|
49
|
+
// 所有任务完成的回调
|
50
|
+
function endCallback() {}
|
51
|
+
// 最大并发数量
|
52
|
+
const max = 3
|
53
|
+
// 失败重试次数
|
54
|
+
const retry = 3
|
55
|
+
|
56
|
+
let q = new asyncQueue(max,retry,endCallback)
|
29
57
|
```
|
30
58
|
> 执行
|
31
59
|
```js
|
32
60
|
async function test(){
|
33
61
|
async function _get(){}
|
62
|
+
// 可以把请求推进去但是不直接执行
|
63
|
+
// q.push(_get)
|
64
|
+
// q.run()
|
65
|
+
// 若是想直接执行
|
66
|
+
// q.run(_get, data => {}, err => {})
|
67
|
+
// ----------------------
|
68
|
+
// 但是 一般直接使用下面这种方式 这个函数是对上面的封装
|
34
69
|
let data = await q.wait(_get) // 这样就能拿到请求的数据 且不会超过指定数量
|
35
70
|
}
|
71
|
+
test()
|
72
|
+
// 合并多个请求
|
73
|
+
async function test2(){
|
74
|
+
// 该函数模拟多个请求
|
75
|
+
// 这里被包装的是某个接口
|
76
|
+
}
|
77
|
+
|
78
|
+
|
79
|
+
// 模拟多个位置 需要使用这个请求
|
80
|
+
for(let i = 0; i < 10; i++){
|
81
|
+
await MergeAsync(test2,"请求用的参数或者是唯一的key")
|
82
|
+
}
|
36
83
|
```
|
37
84
|
## api列表
|
38
85
|
|
@@ -48,16 +95,17 @@ export type AsyncParams = {
|
|
48
95
|
retry?: number;
|
49
96
|
endCallback?: () => void;
|
50
97
|
};
|
98
|
+
export type RunFun = (...args: any) => Promise<any>;
|
51
99
|
/**
|
52
100
|
* 异步任务对象
|
53
101
|
*/
|
54
|
-
export
|
102
|
+
export interface RunFunBoj<T extends RunFun = () => Promise<any>> {
|
55
103
|
status: "wait" | "ing" | "end" | "fail";
|
56
|
-
target:
|
104
|
+
target: T;
|
57
105
|
retry: number;
|
58
|
-
callback?:
|
59
|
-
err?:
|
60
|
-
}
|
106
|
+
callback?: <D>(data: D) => void;
|
107
|
+
err?: (e: any) => void;
|
108
|
+
}
|
61
109
|
/**
|
62
110
|
* 异步队列
|
63
111
|
*/
|
@@ -71,7 +119,7 @@ export declare class asyncQueue {
|
|
71
119
|
* @param err 错误回调函数
|
72
120
|
* @returns 添加成功与否
|
73
121
|
*/
|
74
|
-
push(f:
|
122
|
+
push<T extends RunFun>(f: T, callback?: <D>(data: D) => void, err?: (e: any) => void): boolean;
|
75
123
|
/**
|
76
124
|
* 清除运行完成的任务
|
77
125
|
*/
|
@@ -83,18 +131,19 @@ export declare class asyncQueue {
|
|
83
131
|
* @param err 错误回调函数
|
84
132
|
* @returns 添加成功与否
|
85
133
|
*/
|
86
|
-
run(f?:
|
134
|
+
run<T extends RunFun>(f?: T, callback?: <D>(data: D) => void, err?: (e: any) => void): Promise<void>;
|
135
|
+
get status(): "ing" | "end";
|
87
136
|
/**
|
88
137
|
* 获取所有的 任务
|
89
138
|
* @returns
|
90
139
|
*/
|
91
|
-
getTasks(): RunFunBoj[];
|
140
|
+
getTasks(): RunFunBoj<() => Promise<any>>[];
|
92
141
|
/**
|
93
142
|
* 异步运行并得到返回值
|
94
143
|
* @param fun 目标函数
|
95
144
|
* @returns
|
96
145
|
*/
|
97
|
-
wait(fun:
|
146
|
+
wait<T extends RunFun>(fun: T): Promise<ReturnType<T>>;
|
98
147
|
}
|
99
148
|
/**
|
100
149
|
* 在某个异步请求 参数相同 返回的值相同
|
@@ -105,6 +154,12 @@ export declare class asyncQueue {
|
|
105
154
|
* @param param 函数传参 必须传入支持序列化的
|
106
155
|
* @returns
|
107
156
|
*/
|
108
|
-
export declare function MergeAsync<T extends (
|
157
|
+
export declare function MergeAsync<T extends RunFun>(asyncFun: T, ...param: Parameters<T>): Promise<ReturnType<T>>;
|
158
|
+
|
159
|
+
```
|
160
|
+
|
161
|
+
## 仓库地址
|
162
|
+
- [码云 gitee](https://gitee.com/fan-yanxi/await-num-q.git)
|
163
|
+
- [华为 gitcode](https://gitcode.com/black-hole/async-q)
|
109
164
|
|
110
|
-
|
165
|
+
喜欢的话给个star吧
|
package/dist/index.d.ts
CHANGED
@@ -9,16 +9,17 @@ export type AsyncParams = {
|
|
9
9
|
retry?: number;
|
10
10
|
endCallback?: () => void;
|
11
11
|
};
|
12
|
+
export type RunFun = (...args: any) => Promise<any>;
|
12
13
|
/**
|
13
14
|
* 异步任务对象
|
14
15
|
*/
|
15
|
-
export
|
16
|
+
export interface RunFunBoj<T extends RunFun = () => Promise<any>> {
|
16
17
|
status: "wait" | "ing" | "end" | "fail";
|
17
|
-
target:
|
18
|
+
target: T;
|
18
19
|
retry: number;
|
19
|
-
callback?:
|
20
|
-
err?:
|
21
|
-
}
|
20
|
+
callback?: <D>(data: D) => void;
|
21
|
+
err?: (e: any) => void;
|
22
|
+
}
|
22
23
|
/**
|
23
24
|
* 异步队列
|
24
25
|
*/
|
@@ -32,7 +33,7 @@ export declare class asyncQueue {
|
|
32
33
|
* @param err 错误回调函数
|
33
34
|
* @returns 添加成功与否
|
34
35
|
*/
|
35
|
-
push(f:
|
36
|
+
push<T extends RunFun>(f: T, callback?: <D>(data: D) => void, err?: (e: any) => void): boolean;
|
36
37
|
/**
|
37
38
|
* 清除运行完成的任务
|
38
39
|
*/
|
@@ -44,18 +45,19 @@ export declare class asyncQueue {
|
|
44
45
|
* @param err 错误回调函数
|
45
46
|
* @returns 添加成功与否
|
46
47
|
*/
|
47
|
-
run(f?:
|
48
|
+
run<T extends RunFun>(f?: T, callback?: <D>(data: D) => void, err?: (e: any) => void): Promise<void>;
|
49
|
+
get status(): "ing" | "end";
|
48
50
|
/**
|
49
51
|
* 获取所有的 任务
|
50
52
|
* @returns
|
51
53
|
*/
|
52
|
-
getTasks(): RunFunBoj[];
|
54
|
+
getTasks(): RunFunBoj<() => Promise<any>>[];
|
53
55
|
/**
|
54
56
|
* 异步运行并得到返回值
|
55
57
|
* @param fun 目标函数
|
56
58
|
* @returns
|
57
59
|
*/
|
58
|
-
wait(fun:
|
60
|
+
wait<T extends RunFun>(fun: T): Promise<ReturnType<T>>;
|
59
61
|
}
|
60
62
|
/**
|
61
63
|
* 在某个异步请求 参数相同 返回的值相同
|
@@ -66,4 +68,4 @@ export declare class asyncQueue {
|
|
66
68
|
* @param param 函数传参 必须传入支持序列化的
|
67
69
|
* @returns
|
68
70
|
*/
|
69
|
-
export declare function MergeAsync<T extends (
|
71
|
+
export declare function MergeAsync<T extends RunFun>(asyncFun: T, ...param: Parameters<T>): Promise<ReturnType<T>>;
|
package/dist/index.js
CHANGED
@@ -30,7 +30,13 @@ class asyncQueue {
|
|
30
30
|
_asyncQueue_Queue.set(this, []);
|
31
31
|
_asyncQueue_runNum.set(this, 0);
|
32
32
|
_asyncQueue_retry.set(this, 0);
|
33
|
+
/**
|
34
|
+
* 最大运行时 请求数量
|
35
|
+
*/
|
33
36
|
_asyncQueue_maxNum.set(this, 3);
|
37
|
+
/**
|
38
|
+
* 当前队列的运行状况
|
39
|
+
*/
|
34
40
|
_asyncQueue_status.set(this, "end");
|
35
41
|
_asyncQueue_endCallback.set(this, void 0);
|
36
42
|
if (max) {
|
@@ -52,7 +58,8 @@ class asyncQueue {
|
|
52
58
|
if (f.constructor.name !== "Function") {
|
53
59
|
return false;
|
54
60
|
}
|
55
|
-
|
61
|
+
// 队列对象 运行时
|
62
|
+
const funObj = {
|
56
63
|
status: "wait",
|
57
64
|
target: f,
|
58
65
|
retry: __classPrivateFieldGet(this, _asyncQueue_retry, "f"),
|
@@ -80,13 +87,14 @@ class asyncQueue {
|
|
80
87
|
return __awaiter(this, void 0, void 0, function* () {
|
81
88
|
var _a, _b;
|
82
89
|
if (f) {
|
90
|
+
// 注入函数
|
83
91
|
this.push(f, callback, err);
|
84
92
|
}
|
85
93
|
if (__classPrivateFieldGet(this, _asyncQueue_runNum, "f") >= __classPrivateFieldGet(this, _asyncQueue_maxNum, "f")) {
|
86
94
|
return;
|
87
95
|
}
|
88
96
|
let fun = null;
|
89
|
-
for (
|
97
|
+
for (const f of __classPrivateFieldGet(this, _asyncQueue_Queue, "f")) {
|
90
98
|
if (f.status == "wait") {
|
91
99
|
fun = f;
|
92
100
|
break;
|
@@ -122,16 +130,19 @@ class asyncQueue {
|
|
122
130
|
}
|
123
131
|
}
|
124
132
|
else {
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
else if (__classPrivateFieldGet(this, _asyncQueue_Queue, "f").length === 0) {
|
130
|
-
__classPrivateFieldGet(this, _asyncQueue_endCallback, "f").call(this);
|
133
|
+
for (const f of __classPrivateFieldGet(this, _asyncQueue_Queue, "f")) {
|
134
|
+
if (f.status != "end" && f.status != "fail") {
|
135
|
+
return;
|
136
|
+
}
|
131
137
|
}
|
138
|
+
__classPrivateFieldSet(this, _asyncQueue_status, "end", "f");
|
139
|
+
__classPrivateFieldGet(this, _asyncQueue_endCallback, "f").call(this);
|
132
140
|
}
|
133
141
|
});
|
134
142
|
}
|
143
|
+
get status() {
|
144
|
+
return __classPrivateFieldGet(this, _asyncQueue_status, "f");
|
145
|
+
}
|
135
146
|
/**
|
136
147
|
* 获取所有的 任务
|
137
148
|
* @returns
|
@@ -166,14 +177,15 @@ const mergePromise = new WeakMap();
|
|
166
177
|
*/
|
167
178
|
function MergeAsync(asyncFun, ...param) {
|
168
179
|
return __awaiter(this, void 0, void 0, function* () {
|
169
|
-
|
180
|
+
const key = JSON.stringify(param);
|
170
181
|
if (mergePromise.has(key)) {
|
171
182
|
return mergePromise.get(key);
|
172
183
|
}
|
173
|
-
|
184
|
+
mergePromise.set(key, asyncFun(...param));
|
185
|
+
const r = (yield asyncFun(...param));
|
174
186
|
mergePromise.delete(key);
|
175
187
|
return r;
|
176
188
|
});
|
177
189
|
}
|
178
190
|
exports.MergeAsync = MergeAsync;
|
179
|
-
//# sourceMappingURL=data:application/json;base64,
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJBOztHQUVHO0FBQ0gsTUFBYSxVQUFVO0lBYXJCLFlBQVksRUFDVixHQUFHLEVBQ0gsS0FBSyxFQUNMLFdBQVcsR0FDQztRQWhCZCw0QkFBc0IsRUFBRSxFQUFDO1FBQ3pCLDZCQUFVLENBQUMsRUFBQztRQUNaLDRCQUFTLENBQUMsRUFBQztRQUNYOztXQUVHO1FBQ0gsNkJBQVUsQ0FBQyxFQUFDO1FBQ1o7O1dBRUc7UUFDSCw2QkFBeUIsS0FBSyxFQUFDO1FBQy9CLDBDQUF5QjtRQU12QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsdUJBQUEsSUFBSSxzQkFBVyxHQUFHLE1BQUEsQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLHVCQUFBLElBQUkscUJBQVUsS0FBSyxNQUFBLENBQUM7UUFDdEIsQ0FBQztRQUVELHVCQUFBLElBQUksMkJBQWdCLFdBQVcsSUFBSSxjQUFjLENBQUMsTUFBQSxDQUFDO0lBQ3JELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFJLENBQW1CLENBQUksRUFBRSxRQUE4QixFQUFFLEdBQXFCO1FBQ2hGLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsV0FBVztRQUNYLE1BQU0sTUFBTSxHQUFjO1lBQ3hCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLENBQUM7WUFDVCxLQUFLLEVBQUUsdUJBQUEsSUFBSSx5QkFBTztZQUNsQixRQUFRO1lBQ1IsR0FBRztTQUNKLENBQUM7UUFDRix1QkFBQSxJQUFJLHlCQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxL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
|
package/package.json
CHANGED
@@ -1,13 +1,32 @@
|
|
1
|
-
{
|
2
|
-
"name": "await-num-q",
|
3
|
-
"version": "1.
|
4
|
-
"description": "一个用于 处理 指定并行异步任务数量的 队列",
|
5
|
-
"keywords":[
|
6
|
-
|
7
|
-
|
8
|
-
"
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
{
|
2
|
+
"name": "await-num-q",
|
3
|
+
"version": "1.3.0",
|
4
|
+
"description": "一个用于 处理 指定并行异步任务数量的 队列",
|
5
|
+
"keywords": [
|
6
|
+
"q",
|
7
|
+
"await",
|
8
|
+
"async",
|
9
|
+
"队列",
|
10
|
+
"异步",
|
11
|
+
"并行"
|
12
|
+
],
|
13
|
+
"main": "dist/index.js",
|
14
|
+
"scripts": {
|
15
|
+
"lint": "eslint . --ext .ts,.tsx",
|
16
|
+
"lint:fix": "eslint . --ext .ts,.tsx --fix",
|
17
|
+
"build": "tsc",
|
18
|
+
"version:main": "npm version major",
|
19
|
+
"version:update": "npm version minor",
|
20
|
+
"version:fix": "npm version patch"
|
21
|
+
},
|
22
|
+
"types": "dist/index.d.ts",
|
23
|
+
"author": "xxl.nice@foxmail.com",
|
24
|
+
"license": "ISC",
|
25
|
+
"devDependencies": {
|
26
|
+
"@types/estree": "^1.0.7",
|
27
|
+
"@types/json-schema": "^7.0.15",
|
28
|
+
"@typescript-eslint/eslint-plugin": "^8.32.1",
|
29
|
+
"@typescript-eslint/parser": "^8.32.1",
|
30
|
+
"eslint": "^8.57.1"
|
31
|
+
}
|
32
|
+
}
|