tools-min-ns 1.18.7 → 1.18.8
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 +2 -0
- package/esm/request/RequestUtil.d.ts +1 -1
- package/esm/request/RequestUtil.js +86 -21
- package/lib/request/RequestUtil.d.ts +1 -1
- package/lib/request/RequestUtil.js +86 -21
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ import mgop, { setDefaultHeader } from './mgop';
|
|
|
8
8
|
import uniRquestFn from './uniRquest';
|
|
9
9
|
import jsonpFn, { jsonpRquest as jsonpRquestFn } from './jsonp';
|
|
10
10
|
import nsPromiseFn from './nsPromiseFn';
|
|
11
|
-
export type PromiseInput<T> =
|
|
11
|
+
export type PromiseInput<T> = (() => Promise<T>)[] | (() => Promise<T>) | Promise<T>;
|
|
12
12
|
declare namespace RequestUtil {
|
|
13
13
|
/** @name 浙里办请求工具设置默认请求头 */
|
|
14
14
|
export const mgopSetDefaultHeader: typeof setDefaultHeader;
|
|
@@ -113,6 +113,37 @@ var __generator = this && this.__generator || function (thisArg, body) {
|
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
115
|
};
|
|
116
|
+
var __read = this && this.__read || function (o, n) {
|
|
117
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
118
|
+
if (!m) return o;
|
|
119
|
+
var i = m.call(o),
|
|
120
|
+
r,
|
|
121
|
+
ar = [],
|
|
122
|
+
e;
|
|
123
|
+
try {
|
|
124
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
125
|
+
} catch (error) {
|
|
126
|
+
e = {
|
|
127
|
+
error: error
|
|
128
|
+
};
|
|
129
|
+
} finally {
|
|
130
|
+
try {
|
|
131
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
132
|
+
} finally {
|
|
133
|
+
if (e) throw e.error;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return ar;
|
|
137
|
+
};
|
|
138
|
+
var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
|
|
139
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
140
|
+
if (ar || !(i in from)) {
|
|
141
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
142
|
+
ar[i] = from[i];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
146
|
+
};
|
|
116
147
|
/**
|
|
117
148
|
* 请求工具
|
|
118
149
|
* @description
|
|
@@ -175,43 +206,52 @@ var RequestUtil;
|
|
|
175
206
|
*/
|
|
176
207
|
function handleRequests(requests, options) {
|
|
177
208
|
return __awaiter(this, void 0, void 0, function () {
|
|
178
|
-
// 存储所有请求的结果
|
|
179
|
-
// 定义一个递归函数,用于处理请求并控制并发数量
|
|
180
209
|
function processRequest() {
|
|
181
210
|
return __awaiter(this, void 0, void 0, function () {
|
|
182
|
-
var
|
|
211
|
+
var resFn, result, progress, error_1;
|
|
183
212
|
return __generator(this, function (_a) {
|
|
184
213
|
switch (_a.label) {
|
|
185
214
|
case 0:
|
|
186
|
-
if (!functionArray.length) return [
|
|
187
|
-
|
|
188
|
-
if (!
|
|
189
|
-
|
|
215
|
+
if (!(functionArray.length > 0)) return [3 /*break*/, 6];
|
|
216
|
+
resFn = functionArray.shift();
|
|
217
|
+
if (!resFn) return [3 /*break*/, 0];
|
|
218
|
+
_a.label = 1;
|
|
190
219
|
case 1:
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
results.push(result);
|
|
194
|
-
// 将结果存储
|
|
195
|
-
// 递归调用,确保有新的请求补充进去
|
|
196
|
-
return [4 /*yield*/, processRequest()];
|
|
220
|
+
_a.trys.push([1, 4,, 5]);
|
|
221
|
+
return [4 /*yield*/, resFn()];
|
|
197
222
|
case 2:
|
|
198
|
-
|
|
199
|
-
//
|
|
223
|
+
result = _a.sent();
|
|
224
|
+
results.push(result); // 顺序由完成顺序决定
|
|
225
|
+
// 更新进度(使用互斥锁确保原子性)
|
|
226
|
+
return [4 /*yield*/, progressLock.acquire()];
|
|
227
|
+
case 3:
|
|
228
|
+
// 更新进度(使用互斥锁确保原子性)
|
|
200
229
|
_a.sent();
|
|
201
230
|
loaded += 1;
|
|
231
|
+
progress = loaded / resLength;
|
|
202
232
|
onUploadProgress === null || onUploadProgress === void 0 ? void 0 : onUploadProgress({
|
|
203
233
|
total: resLength,
|
|
204
234
|
loaded: loaded,
|
|
205
|
-
progress:
|
|
235
|
+
progress: progress,
|
|
206
236
|
nowResponse: result,
|
|
207
|
-
endResponses: results
|
|
237
|
+
endResponses: __spreadArray([], __read(results), false)
|
|
208
238
|
});
|
|
239
|
+
progressLock.release();
|
|
240
|
+
return [3 /*break*/, 5];
|
|
241
|
+
case 4:
|
|
242
|
+
error_1 = _a.sent();
|
|
243
|
+
// 错误处理(根据需求决定是否抛出或记录)
|
|
244
|
+
console.error('请求失败:', error_1);
|
|
245
|
+
throw error_1;
|
|
246
|
+
case 5:
|
|
247
|
+
return [3 /*break*/, 0];
|
|
248
|
+
case 6:
|
|
209
249
|
return [2 /*return*/];
|
|
210
250
|
}
|
|
211
251
|
});
|
|
212
252
|
});
|
|
213
253
|
}
|
|
214
|
-
var _a, _b, limit, onUploadProgress, requestArray, functionArray, resLength, results, loaded, concurrent;
|
|
254
|
+
var _a, _b, limit, onUploadProgress, requestArray, functionArray, resLength, results, loaded, progressLock, concurrent;
|
|
215
255
|
return __generator(this, function (_c) {
|
|
216
256
|
switch (_c.label) {
|
|
217
257
|
case 0:
|
|
@@ -225,23 +265,48 @@ var RequestUtil;
|
|
|
225
265
|
resLength = functionArray.length;
|
|
226
266
|
results = [];
|
|
227
267
|
loaded = 0;
|
|
268
|
+
progressLock = new AsyncLock();
|
|
228
269
|
concurrent = Array.from({
|
|
229
270
|
length: Math.min(limit, resLength)
|
|
230
271
|
}, function () {
|
|
231
272
|
return processRequest();
|
|
232
273
|
});
|
|
233
|
-
// 等待所有并发的请求完成
|
|
234
274
|
return [4 /*yield*/, Promise.all(concurrent)];
|
|
235
275
|
case 1:
|
|
236
|
-
// 等待所有并发的请求完成
|
|
237
276
|
_c.sent();
|
|
238
277
|
return [2 /*return*/, results];
|
|
239
|
-
// 返回所有请求的结果
|
|
240
278
|
}
|
|
241
279
|
});
|
|
242
280
|
});
|
|
243
281
|
}
|
|
244
282
|
RequestUtil.handleRequests = handleRequests;
|
|
283
|
+
// 互斥锁实现(简化版)
|
|
284
|
+
var AsyncLock = /** @class */function () {
|
|
285
|
+
function AsyncLock() {
|
|
286
|
+
this._locked = false;
|
|
287
|
+
this._queue = [];
|
|
288
|
+
}
|
|
289
|
+
AsyncLock.prototype.acquire = function () {
|
|
290
|
+
var _this = this;
|
|
291
|
+
return new Promise(function (resolve) {
|
|
292
|
+
var _tryAcquire = function tryAcquire() {
|
|
293
|
+
if (!_this._locked) {
|
|
294
|
+
_this._locked = true;
|
|
295
|
+
resolve();
|
|
296
|
+
} else {
|
|
297
|
+
_this._queue.push(_tryAcquire);
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
_tryAcquire();
|
|
301
|
+
});
|
|
302
|
+
};
|
|
303
|
+
AsyncLock.prototype.release = function () {
|
|
304
|
+
this._locked = false;
|
|
305
|
+
var next = this._queue.shift();
|
|
306
|
+
if (next) next();
|
|
307
|
+
};
|
|
308
|
+
return AsyncLock;
|
|
309
|
+
}();
|
|
245
310
|
/**
|
|
246
311
|
* 封装多个 Promise 方法,返回 [错误, 数据, 停止状态] 格式
|
|
247
312
|
* @param {Array<Function | Promise> | Function | Promise} input - 返回 Promise 的函数数组或 Promise 数组,或者单个函数或 Promise
|
|
@@ -8,7 +8,7 @@ import mgop, { setDefaultHeader } from './mgop';
|
|
|
8
8
|
import uniRquestFn from './uniRquest';
|
|
9
9
|
import jsonpFn, { jsonpRquest as jsonpRquestFn } from './jsonp';
|
|
10
10
|
import nsPromiseFn from './nsPromiseFn';
|
|
11
|
-
export type PromiseInput<T> =
|
|
11
|
+
export type PromiseInput<T> = (() => Promise<T>)[] | (() => Promise<T>) | Promise<T>;
|
|
12
12
|
declare namespace RequestUtil {
|
|
13
13
|
/** @name 浙里办请求工具设置默认请求头 */
|
|
14
14
|
export const mgopSetDefaultHeader: typeof setDefaultHeader;
|
|
@@ -146,6 +146,37 @@ var __generator = this && this.__generator || function (thisArg, body) {
|
|
|
146
146
|
};
|
|
147
147
|
}
|
|
148
148
|
};
|
|
149
|
+
var __read = this && this.__read || function (o, n) {
|
|
150
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
151
|
+
if (!m) return o;
|
|
152
|
+
var i = m.call(o),
|
|
153
|
+
r,
|
|
154
|
+
ar = [],
|
|
155
|
+
e;
|
|
156
|
+
try {
|
|
157
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
158
|
+
} catch (error) {
|
|
159
|
+
e = {
|
|
160
|
+
error: error
|
|
161
|
+
};
|
|
162
|
+
} finally {
|
|
163
|
+
try {
|
|
164
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
165
|
+
} finally {
|
|
166
|
+
if (e) throw e.error;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return ar;
|
|
170
|
+
};
|
|
171
|
+
var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
|
|
172
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
173
|
+
if (ar || !(i in from)) {
|
|
174
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
175
|
+
ar[i] = from[i];
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
179
|
+
};
|
|
149
180
|
var __importDefault = this && this.__importDefault || function (mod) {
|
|
150
181
|
return mod && mod.__esModule ? mod : {
|
|
151
182
|
"default": mod
|
|
@@ -216,43 +247,52 @@ var RequestUtil;
|
|
|
216
247
|
*/
|
|
217
248
|
function handleRequests(requests, options) {
|
|
218
249
|
return __awaiter(this, void 0, void 0, function () {
|
|
219
|
-
// 存储所有请求的结果
|
|
220
|
-
// 定义一个递归函数,用于处理请求并控制并发数量
|
|
221
250
|
function processRequest() {
|
|
222
251
|
return __awaiter(this, void 0, void 0, function () {
|
|
223
|
-
var
|
|
252
|
+
var resFn, result, progress, error_1;
|
|
224
253
|
return __generator(this, function (_a) {
|
|
225
254
|
switch (_a.label) {
|
|
226
255
|
case 0:
|
|
227
|
-
if (!functionArray.length) return [
|
|
228
|
-
|
|
229
|
-
if (!
|
|
230
|
-
|
|
256
|
+
if (!(functionArray.length > 0)) return [3 /*break*/, 6];
|
|
257
|
+
resFn = functionArray.shift();
|
|
258
|
+
if (!resFn) return [3 /*break*/, 0];
|
|
259
|
+
_a.label = 1;
|
|
231
260
|
case 1:
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
results.push(result);
|
|
235
|
-
// 将结果存储
|
|
236
|
-
// 递归调用,确保有新的请求补充进去
|
|
237
|
-
return [4 /*yield*/, processRequest()];
|
|
261
|
+
_a.trys.push([1, 4,, 5]);
|
|
262
|
+
return [4 /*yield*/, resFn()];
|
|
238
263
|
case 2:
|
|
239
|
-
|
|
240
|
-
//
|
|
264
|
+
result = _a.sent();
|
|
265
|
+
results.push(result); // 顺序由完成顺序决定
|
|
266
|
+
// 更新进度(使用互斥锁确保原子性)
|
|
267
|
+
return [4 /*yield*/, progressLock.acquire()];
|
|
268
|
+
case 3:
|
|
269
|
+
// 更新进度(使用互斥锁确保原子性)
|
|
241
270
|
_a.sent();
|
|
242
271
|
loaded += 1;
|
|
272
|
+
progress = loaded / resLength;
|
|
243
273
|
onUploadProgress === null || onUploadProgress === void 0 ? void 0 : onUploadProgress({
|
|
244
274
|
total: resLength,
|
|
245
275
|
loaded: loaded,
|
|
246
|
-
progress:
|
|
276
|
+
progress: progress,
|
|
247
277
|
nowResponse: result,
|
|
248
|
-
endResponses: results
|
|
278
|
+
endResponses: __spreadArray([], __read(results), false)
|
|
249
279
|
});
|
|
280
|
+
progressLock.release();
|
|
281
|
+
return [3 /*break*/, 5];
|
|
282
|
+
case 4:
|
|
283
|
+
error_1 = _a.sent();
|
|
284
|
+
// 错误处理(根据需求决定是否抛出或记录)
|
|
285
|
+
console.error('请求失败:', error_1);
|
|
286
|
+
throw error_1;
|
|
287
|
+
case 5:
|
|
288
|
+
return [3 /*break*/, 0];
|
|
289
|
+
case 6:
|
|
250
290
|
return [2 /*return*/];
|
|
251
291
|
}
|
|
252
292
|
});
|
|
253
293
|
});
|
|
254
294
|
}
|
|
255
|
-
var _a, _b, limit, onUploadProgress, requestArray, functionArray, resLength, results, loaded, concurrent;
|
|
295
|
+
var _a, _b, limit, onUploadProgress, requestArray, functionArray, resLength, results, loaded, progressLock, concurrent;
|
|
256
296
|
return __generator(this, function (_c) {
|
|
257
297
|
switch (_c.label) {
|
|
258
298
|
case 0:
|
|
@@ -266,23 +306,48 @@ var RequestUtil;
|
|
|
266
306
|
resLength = functionArray.length;
|
|
267
307
|
results = [];
|
|
268
308
|
loaded = 0;
|
|
309
|
+
progressLock = new AsyncLock();
|
|
269
310
|
concurrent = Array.from({
|
|
270
311
|
length: Math.min(limit, resLength)
|
|
271
312
|
}, function () {
|
|
272
313
|
return processRequest();
|
|
273
314
|
});
|
|
274
|
-
// 等待所有并发的请求完成
|
|
275
315
|
return [4 /*yield*/, Promise.all(concurrent)];
|
|
276
316
|
case 1:
|
|
277
|
-
// 等待所有并发的请求完成
|
|
278
317
|
_c.sent();
|
|
279
318
|
return [2 /*return*/, results];
|
|
280
|
-
// 返回所有请求的结果
|
|
281
319
|
}
|
|
282
320
|
});
|
|
283
321
|
});
|
|
284
322
|
}
|
|
285
323
|
RequestUtil.handleRequests = handleRequests;
|
|
324
|
+
// 互斥锁实现(简化版)
|
|
325
|
+
var AsyncLock = /** @class */function () {
|
|
326
|
+
function AsyncLock() {
|
|
327
|
+
this._locked = false;
|
|
328
|
+
this._queue = [];
|
|
329
|
+
}
|
|
330
|
+
AsyncLock.prototype.acquire = function () {
|
|
331
|
+
var _this = this;
|
|
332
|
+
return new Promise(function (resolve) {
|
|
333
|
+
var _tryAcquire = function tryAcquire() {
|
|
334
|
+
if (!_this._locked) {
|
|
335
|
+
_this._locked = true;
|
|
336
|
+
resolve();
|
|
337
|
+
} else {
|
|
338
|
+
_this._queue.push(_tryAcquire);
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
_tryAcquire();
|
|
342
|
+
});
|
|
343
|
+
};
|
|
344
|
+
AsyncLock.prototype.release = function () {
|
|
345
|
+
this._locked = false;
|
|
346
|
+
var next = this._queue.shift();
|
|
347
|
+
if (next) next();
|
|
348
|
+
};
|
|
349
|
+
return AsyncLock;
|
|
350
|
+
}();
|
|
286
351
|
/**
|
|
287
352
|
* 封装多个 Promise 方法,返回 [错误, 数据, 停止状态] 格式
|
|
288
353
|
* @param {Array<Function | Promise> | Function | Promise} input - 返回 Promise 的函数数组或 Promise 数组,或者单个函数或 Promise
|