@whitesev/utils 2.2.1 → 2.2.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.
@@ -1124,6 +1124,12 @@ export declare interface HttpxHookErrorData {
1124
1124
  error: Error;
1125
1125
  response: any;
1126
1126
  }
1127
+ export type HttpxPromise<T> = Promise<T> & {
1128
+ /**
1129
+ * 用于取消发送的请求,并执行resolve返回abort
1130
+ */
1131
+ abort(): void;
1132
+ };
1127
1133
  declare class Httpx {
1128
1134
  #private;
1129
1135
  private GM_Api;
@@ -1132,6 +1138,10 @@ declare class Httpx {
1132
1138
  private HttpxRequestDetails;
1133
1139
  private HttpxCallBack;
1134
1140
  private HttpxRequest;
1141
+ /**
1142
+ * 实例化,可传入GM_xmlhttpRequest,未传入则使用window.fetch
1143
+ * @param __xmlHttpRequest__
1144
+ */
1135
1145
  constructor(__xmlHttpRequest__?: any);
1136
1146
  /**
1137
1147
  * 覆盖全局配置
@@ -1195,69 +1205,69 @@ declare class Httpx {
1195
1205
  setXMLHttpRequest(httpRequest: any): void;
1196
1206
  /**
1197
1207
  * GET 请求
1208
+ * @param url 网址
1198
1209
  * @param details 配置
1199
1210
  */
1200
- get<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
1211
+ get<T extends HttpxDetails>(url: string, details: T): HttpxPromise<HttpxAsyncResult<T>>;
1201
1212
  /**
1202
1213
  * GET 请求
1203
- * @param url 网址
1204
1214
  * @param details 配置
1205
1215
  */
1206
- get<T extends HttpxDetails>(url: string, details: T): Promise<HttpxAsyncResult<T>>;
1216
+ get<T extends HttpxDetails>(details: T): HttpxPromise<HttpxAsyncResult<T>>;
1207
1217
  /**
1208
1218
  * POST 请求
1209
1219
  * @param details 配置
1210
1220
  */
1211
- post<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
1221
+ post<T extends HttpxDetails>(details: T): HttpxPromise<HttpxAsyncResult<T>>;
1212
1222
  /**
1213
1223
  * POST 请求
1214
1224
  * @param url 网址
1215
1225
  * @param details 配置
1216
1226
  */
1217
- post<T extends HttpxDetails>(url: string, details: T): Promise<HttpxAsyncResult<T>>;
1227
+ post<T extends HttpxDetails>(url: string, details: T): HttpxPromise<HttpxAsyncResult<T>>;
1218
1228
  /**
1219
1229
  * HEAD 请求
1220
1230
  * @param details 配置
1221
1231
  */
1222
- head<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
1232
+ head<T extends HttpxDetails>(details: T): HttpxPromise<HttpxAsyncResult<T>>;
1223
1233
  /**
1224
1234
  * HEAD 请求
1225
1235
  * @param url 网址
1226
1236
  * @param details 配置
1227
1237
  */
1228
- head<T extends HttpxDetails>(url: string, details: T): Promise<HttpxAsyncResult<T>>;
1238
+ head<T extends HttpxDetails>(url: string, details: T): HttpxPromise<HttpxAsyncResult<T>>;
1229
1239
  /**
1230
1240
  * OPTIONS 请求
1231
1241
  * @param details 配置
1232
1242
  */
1233
- options<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
1243
+ options<T extends HttpxDetails>(details: T): HttpxPromise<HttpxAsyncResult<T>>;
1234
1244
  /**
1235
1245
  * OPTIONS 请求
1236
1246
  * @param url 网址
1237
1247
  * @param details 配置
1238
1248
  */
1239
- options<T extends HttpxDetails>(url: string, details: T): Promise<HttpxAsyncResult<T>>;
1249
+ options<T extends HttpxDetails>(url: string, details: T): HttpxPromise<HttpxAsyncResult<T>>;
1240
1250
  /**
1241
1251
  * DELETE 请求
1242
1252
  * @param details 配置
1243
1253
  */
1244
- delete<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
1254
+ delete<T extends HttpxDetails>(details: T): HttpxPromise<HttpxAsyncResult<T>>;
1245
1255
  /**
1246
1256
  * DELETE 请求
1247
1257
  * @param url 网址
1248
1258
  * @param details 配置
1249
1259
  */
1250
- delete<T extends HttpxDetails>(url: string, details: T): Promise<HttpxAsyncResult<T>>;
1260
+ delete<T extends HttpxDetails>(url: string, details: T): HttpxPromise<HttpxAsyncResult<T>>;
1251
1261
  /**
1252
1262
  * PUT 请求
1253
1263
  * @param details 配置
1254
1264
  */
1255
- put<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
1265
+ put<T extends HttpxDetails>(details: T): HttpxPromise<HttpxAsyncResult<T>>;
1256
1266
  /**
1257
1267
  * PUT 请求
1258
1268
  * @param url 网址
1259
1269
  * @param details 配置
1260
1270
  */
1261
- put<T extends HttpxDetails>(url: string, details: T): Promise<HttpxAsyncResult<T>>;
1271
+ put<T extends HttpxDetails>(url: string, details: T): HttpxPromise<HttpxAsyncResult<T>>;
1262
1272
  }
1263
1273
  export { Httpx };
@@ -320,7 +320,7 @@ declare class Utils {
320
320
  * Utils.formatTime()
321
321
  * > '2023-1-1 00:00:00'
322
322
  **/
323
- formatTime(text?: string | number | Date, formatType?: "yyyy-MM-dd HH:mm:ss" | "yyyy/MM/dd HH:mm:ss" | "yyyy_MM_dd_HH_mm_ss" | "yyyy年MM月dd日 HH时mm分ss秒" | "yyyy年MM月dd日 hh:mm:ss" | "yyyy年MM月dd日 HH:mm:ss" | "yyyy-MM-dd" | "yyyyMMdd" | "HH:mm:ss"): string;
323
+ formatTime(text?: string | number | Date, formatType?: "yyyy-MM-dd HH:mm:ss" | "yyyy/MM/dd HH:mm:ss" | "yyyy_MM_dd_HH_mm_ss" | "yyyy年MM月dd日 HH时mm分ss秒" | "yyyy年MM月dd日 hh:mm:ss" | "yyyy年MM月dd日 HH:mm:ss" | "yyyy-MM-dd" | "yyyyMMdd" | "HH:mm:ss" | "yyyy" | "MM" | "dd" | "HH" | "mm" | "ss"): string;
324
324
  /**
325
325
  * 字符串格式的时间转时间戳
326
326
  * @param text 字符串格式的时间,例如:
@@ -1029,6 +1029,13 @@ declare class Utils {
1029
1029
  */
1030
1030
  callback: MutationCallback;
1031
1031
  }): MutationObserver;
1032
+ /**
1033
+ * 使用观察器观察元素出现在视图内,出现的话触发回调
1034
+ * @param target 目标元素
1035
+ * @param callback 触发的回调
1036
+ * @param options 观察器配置
1037
+ */
1038
+ mutatuinVisible(target: Element | Element[], callback: (entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void, options?: IntersectionObserverInit): void;
1032
1039
  /**
1033
1040
  * 去除全局window下的Utils,返回控制权
1034
1041
  * @example
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whitesev/utils",
3
- "version": "2.2.1",
3
+ "version": "2.2.3",
4
4
  "description": "一个常用的工具库",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",
package/src/Httpx.ts CHANGED
@@ -1223,6 +1223,13 @@ export declare interface HttpxHookErrorData {
1223
1223
  response: any;
1224
1224
  }
1225
1225
 
1226
+ export type HttpxPromise<T> = Promise<T> & {
1227
+ /**
1228
+ * 用于取消发送的请求,并执行resolve返回abort
1229
+ */
1230
+ abort(): void;
1231
+ };
1232
+
1226
1233
  class Httpx {
1227
1234
  private GM_Api = {
1228
1235
  xmlHttpRequest: null as any,
@@ -2014,10 +2021,10 @@ class Httpx {
2014
2021
  if (details.fetch) {
2015
2022
  const { fetchDetails, fetchRequestInit, abortController } =
2016
2023
  this.context.HttpxRequestDetails.handleFetchDetail(details);
2017
- this.fetch(fetchDetails, fetchRequestInit, abortController);
2024
+ return this.fetch(fetchDetails, fetchRequestInit, abortController);
2018
2025
  } else {
2019
2026
  Reflect.deleteProperty(details, "fetchInit");
2020
- this.xmlHttpRequest(details);
2027
+ return this.xmlHttpRequest(details);
2021
2028
  }
2022
2029
  },
2023
2030
  /**
@@ -2025,7 +2032,7 @@ class Httpx {
2025
2032
  * @param details
2026
2033
  */
2027
2034
  xmlHttpRequest(details: Required<HttpxDetails>) {
2028
- this.context.GM_Api.xmlHttpRequest(details);
2035
+ return this.context.GM_Api.xmlHttpRequest(details);
2029
2036
  },
2030
2037
  /**
2031
2038
  * 使用fetch发送请求
@@ -2195,6 +2202,10 @@ class Httpx {
2195
2202
  * 当前使用请求时,输出请求的配置
2196
2203
  */
2197
2204
  #LOG_DETAILS = false;
2205
+ /**
2206
+ * 实例化,可传入GM_xmlhttpRequest,未传入则使用window.fetch
2207
+ * @param __xmlHttpRequest__
2208
+ */
2198
2209
  constructor(__xmlHttpRequest__?: any) {
2199
2210
  if (typeof __xmlHttpRequest__ !== "function") {
2200
2211
  console.warn(
@@ -2306,44 +2317,68 @@ class Httpx {
2306
2317
  }
2307
2318
  /**
2308
2319
  * GET 请求
2320
+ * @param url 网址
2309
2321
  * @param details 配置
2310
2322
  */
2311
- async get<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
2323
+ async get<T extends HttpxDetails>(
2324
+ url: string,
2325
+ details: T // @ts-ignore
2326
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2312
2327
  /**
2313
2328
  * GET 请求
2314
- * @param url 网址
2315
2329
  * @param details 配置
2316
2330
  */
2317
2331
  async get<T extends HttpxDetails>(
2318
- url: string,
2319
- details: T
2320
- ): Promise<HttpxAsyncResult<T>>;
2332
+ details: T // @ts-ignore
2333
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2321
2334
  /**
2322
2335
  * GET 请求
2336
+ * @param url 网址
2337
+ * @param details 配置
2323
2338
  */
2324
2339
  async get(
2325
- ...args: (HttpxDetails | string)[]
2326
- ): Promise<HttpxAsyncResult<HttpxDetails>> {
2327
- let that = this;
2340
+ ...args: (HttpxDetails | string)[] // @ts-ignore
2341
+ ): HttpxPromise<HttpxAsyncResult<HttpxDetails>> {
2328
2342
  let details = this.HttpxRequestDetails.handleBeforeRequestDetails(...args);
2329
-
2330
- return new Promise((resolve, reject) => {
2331
- let requestDetails = that.HttpxRequestDetails.getDetails(
2332
- "GET",
2333
- details,
2334
- resolve,
2335
- reject
2336
- );
2337
- Reflect.deleteProperty(requestDetails, "onprogress");
2338
- (requestDetails as any) = that.HttpxRequestDetails.handle(requestDetails);
2339
- that.HttpxRequest.request(requestDetails);
2343
+ let abortFn: Function | null = null;
2344
+ const promise = new Promise<HttpxAsyncResult<HttpxDetails>>(
2345
+ (resolve, reject) => {
2346
+ let requestDetails = this.HttpxRequestDetails.getDetails(
2347
+ "GET",
2348
+ details,
2349
+ resolve,
2350
+ reject
2351
+ );
2352
+ Reflect.deleteProperty(requestDetails, "onprogress");
2353
+ // @ts-ignore
2354
+ requestDetails = this.HttpxRequestDetails.handle(requestDetails);
2355
+ const requestResult = this.HttpxRequest.request(requestDetails);
2356
+ if (
2357
+ requestResult != null &&
2358
+ typeof requestResult.abort === "function"
2359
+ ) {
2360
+ abortFn = requestResult.abort;
2361
+ }
2362
+ }
2363
+ );
2364
+ Object.defineProperty(promise, "abort", {
2365
+ value: () => {
2366
+ return () => {
2367
+ if (typeof abortFn === "function") {
2368
+ abortFn();
2369
+ }
2370
+ };
2371
+ },
2340
2372
  });
2373
+ return promise;
2341
2374
  }
2342
2375
  /**
2343
2376
  * POST 请求
2344
2377
  * @param details 配置
2345
2378
  */
2346
- async post<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
2379
+ async post<T extends HttpxDetails>(
2380
+ details: T // @ts-ignore
2381
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2347
2382
  /**
2348
2383
  * POST 请求
2349
2384
  * @param url 网址
@@ -2351,33 +2386,53 @@ class Httpx {
2351
2386
  */
2352
2387
  async post<T extends HttpxDetails>(
2353
2388
  url: string,
2354
- details: T
2355
- ): Promise<HttpxAsyncResult<T>>;
2389
+ details: T // @ts-ignore
2390
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2356
2391
  /**
2357
2392
  * POST 请求
2358
2393
  */
2359
2394
  async post(
2360
- ...args: (HttpxDetails | string)[]
2361
- ): Promise<HttpxAsyncResult<HttpxDetails>> {
2362
- let that = this;
2395
+ ...args: (HttpxDetails | string)[] // @ts-ignore
2396
+ ): HttpxPromise<HttpxAsyncResult<HttpxDetails>> {
2363
2397
  let details = this.HttpxRequestDetails.handleBeforeRequestDetails(...args);
2364
-
2365
- return new Promise((resolve, reject) => {
2366
- let requestDetails = that.HttpxRequestDetails.getDetails(
2367
- "POST",
2368
- details,
2369
- resolve,
2370
- reject
2371
- );
2372
- (requestDetails as any) = that.HttpxRequestDetails.handle(requestDetails);
2373
- that.HttpxRequest.request(requestDetails);
2398
+ let abortFn: Function | null = null;
2399
+ const promise = new Promise<HttpxAsyncResult<HttpxDetails>>(
2400
+ (resolve, reject) => {
2401
+ let requestDetails = this.HttpxRequestDetails.getDetails(
2402
+ "POST",
2403
+ details,
2404
+ resolve,
2405
+ reject
2406
+ );
2407
+ // @ts-ignore
2408
+ requestDetails = this.HttpxRequestDetails.handle(requestDetails);
2409
+ const requestResult = this.HttpxRequest.request(requestDetails);
2410
+ if (
2411
+ requestResult != null &&
2412
+ typeof requestResult.abort === "function"
2413
+ ) {
2414
+ abortFn = requestResult.abort;
2415
+ }
2416
+ }
2417
+ );
2418
+ Object.defineProperty(promise, "abort", {
2419
+ value: () => {
2420
+ return () => {
2421
+ if (typeof abortFn === "function") {
2422
+ abortFn();
2423
+ }
2424
+ };
2425
+ },
2374
2426
  });
2427
+ return promise;
2375
2428
  }
2376
2429
  /**
2377
2430
  * HEAD 请求
2378
2431
  * @param details 配置
2379
2432
  */
2380
- async head<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
2433
+ async head<T extends HttpxDetails>(
2434
+ details: T // @ts-ignore
2435
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2381
2436
  /**
2382
2437
  * HEAD 请求
2383
2438
  * @param url 网址
@@ -2385,35 +2440,58 @@ class Httpx {
2385
2440
  */
2386
2441
  async head<T extends HttpxDetails>(
2387
2442
  url: string,
2388
- details: T
2389
- ): Promise<HttpxAsyncResult<T>>;
2443
+ details: T // @ts-ignore
2444
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2390
2445
  /**
2391
2446
  * HEAD 请求
2392
2447
  */
2393
2448
  async head(
2394
- ...args: (HttpxDetails | string)[]
2395
- ): Promise<HttpxAsyncResult<HttpxDetails>> {
2396
- let that = this;
2449
+ ...args: (HttpxDetails | string)[] // @ts-ignore
2450
+ ): HttpxPromise<HttpxAsyncResult<HttpxDetails>> {
2397
2451
  let details = this.HttpxRequestDetails.handleBeforeRequestDetails(...args);
2452
+ let abortFn: Function | null = null;
2398
2453
 
2399
- return new Promise((resolve, reject) => {
2400
- let requestDetails = that.HttpxRequestDetails.getDetails(
2401
- "HEAD",
2402
- details,
2403
- resolve,
2404
- reject
2405
- );
2406
- Reflect.deleteProperty(requestDetails, "onprogress");
2407
- (requestDetails as any) = that.HttpxRequestDetails.handle(requestDetails);
2408
- that.HttpxRequest.request(requestDetails);
2454
+ const promise = new Promise<HttpxAsyncResult<HttpxDetails>>(
2455
+ (resolve, reject) => {
2456
+ let requestDetails = this.HttpxRequestDetails.getDetails(
2457
+ "HEAD",
2458
+ details,
2459
+ resolve,
2460
+ reject
2461
+ );
2462
+ Reflect.deleteProperty(requestDetails, "onprogress");
2463
+ // @ts-ignore
2464
+ requestDetails = this.HttpxRequestDetails.handle(requestDetails);
2465
+ const requestResult = this.HttpxRequest.request(requestDetails);
2466
+ if (
2467
+ requestResult != null &&
2468
+ typeof requestResult.abort === "function"
2469
+ ) {
2470
+ abortFn = requestResult.abort;
2471
+ }
2472
+ }
2473
+ );
2474
+
2475
+ Object.defineProperty(promise, "abort", {
2476
+ value: () => {
2477
+ return () => {
2478
+ if (typeof abortFn === "function") {
2479
+ abortFn();
2480
+ }
2481
+ };
2482
+ },
2409
2483
  });
2484
+
2485
+ return promise;
2410
2486
  }
2411
2487
 
2412
2488
  /**
2413
2489
  * OPTIONS 请求
2414
2490
  * @param details 配置
2415
2491
  */
2416
- options<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
2492
+ options<T extends HttpxDetails>(
2493
+ details: T // @ts-ignore
2494
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2417
2495
  /**
2418
2496
  * OPTIONS 请求
2419
2497
  * @param url 网址
@@ -2421,28 +2499,46 @@ class Httpx {
2421
2499
  */
2422
2500
  options<T extends HttpxDetails>(
2423
2501
  url: string,
2424
- details: T
2425
- ): Promise<HttpxAsyncResult<T>>;
2502
+ details: T // @ts-ignore
2503
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2426
2504
  /**
2427
2505
  * OPTIONS 请求
2428
2506
  */
2429
2507
  async options(
2430
- ...args: (HttpxDetails | string)[]
2431
- ): Promise<HttpxAsyncResult<HttpxDetails>> {
2432
- let that = this;
2508
+ ...args: (HttpxDetails | string)[] // @ts-ignore
2509
+ ): HttpxPromise<HttpxAsyncResult<HttpxDetails>> {
2433
2510
  let details = this.HttpxRequestDetails.handleBeforeRequestDetails(...args);
2434
-
2435
- return new Promise((resolve, reject) => {
2436
- let requestDetails = that.HttpxRequestDetails.getDetails(
2437
- "OPTIONS",
2438
- details,
2439
- resolve,
2440
- reject
2441
- );
2442
- Reflect.deleteProperty(requestDetails, "onprogress");
2443
- (requestDetails as any) = that.HttpxRequestDetails.handle(requestDetails);
2444
- that.HttpxRequest.request(requestDetails);
2511
+ let abortFn: Function | null = null;
2512
+ const promise = new Promise<HttpxAsyncResult<HttpxDetails>>(
2513
+ (resolve, reject) => {
2514
+ let requestDetails = this.HttpxRequestDetails.getDetails(
2515
+ "OPTIONS",
2516
+ details,
2517
+ resolve,
2518
+ reject
2519
+ );
2520
+ Reflect.deleteProperty(requestDetails, "onprogress");
2521
+ // @ts-ignore
2522
+ requestDetails = this.HttpxRequestDetails.handle(requestDetails);
2523
+ const requestResult = this.HttpxRequest.request(requestDetails);
2524
+ if (
2525
+ requestResult != null &&
2526
+ typeof requestResult.abort === "function"
2527
+ ) {
2528
+ abortFn = requestResult.abort;
2529
+ }
2530
+ }
2531
+ );
2532
+ Object.defineProperty(promise, "abort", {
2533
+ value: () => {
2534
+ return () => {
2535
+ if (typeof abortFn === "function") {
2536
+ abortFn();
2537
+ }
2538
+ };
2539
+ },
2445
2540
  });
2541
+ return promise;
2446
2542
  }
2447
2543
 
2448
2544
  /**
@@ -2450,8 +2546,8 @@ class Httpx {
2450
2546
  * @param details 配置
2451
2547
  */
2452
2548
  async delete<T extends HttpxDetails>(
2453
- details: T
2454
- ): Promise<HttpxAsyncResult<T>>;
2549
+ details: T // @ts-ignore
2550
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2455
2551
  /**
2456
2552
  * DELETE 请求
2457
2553
  * @param url 网址
@@ -2459,35 +2555,56 @@ class Httpx {
2459
2555
  */
2460
2556
  async delete<T extends HttpxDetails>(
2461
2557
  url: string,
2462
- details: T
2463
- ): Promise<HttpxAsyncResult<T>>;
2558
+ details: T // @ts-ignore
2559
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2464
2560
  /**
2465
2561
  * DELETE 请求
2466
2562
  */
2467
2563
  async delete(
2468
- ...args: (HttpxDetails | string)[]
2469
- ): Promise<HttpxAsyncResult<HttpxDetails>> {
2470
- let that = this;
2564
+ ...args: (HttpxDetails | string)[] // @ts-ignore
2565
+ ): HttpxPromise<HttpxAsyncResult<HttpxDetails>> {
2471
2566
  let details = this.HttpxRequestDetails.handleBeforeRequestDetails(...args);
2567
+ let abortFn: Function | null = null;
2568
+ const promise = new Promise<HttpxAsyncResult<HttpxDetails>>(
2569
+ (resolve, reject) => {
2570
+ let requestDetails = this.HttpxRequestDetails.getDetails(
2571
+ "DELETE",
2572
+ details,
2573
+ resolve,
2574
+ reject
2575
+ );
2576
+ Reflect.deleteProperty(requestDetails, "onprogress");
2577
+ // @ts-ignore
2578
+ requestDetails = this.HttpxRequestDetails.handle(requestDetails);
2579
+ const requestResult = this.HttpxRequest.request(requestDetails);
2580
+ if (
2581
+ requestResult != null &&
2582
+ typeof requestResult.abort === "function"
2583
+ ) {
2584
+ abortFn = requestResult.abort;
2585
+ }
2586
+ }
2587
+ );
2472
2588
 
2473
- return new Promise((resolve, reject) => {
2474
- let requestDetails = that.HttpxRequestDetails.getDetails(
2475
- "DELETE",
2476
- details,
2477
- resolve,
2478
- reject
2479
- );
2480
- Reflect.deleteProperty(requestDetails, "onprogress");
2481
- (requestDetails as any) = that.HttpxRequestDetails.handle(requestDetails);
2482
- that.HttpxRequest.request(requestDetails);
2589
+ Object.defineProperty(promise, "abort", {
2590
+ value: () => {
2591
+ return () => {
2592
+ if (typeof abortFn === "function") {
2593
+ abortFn();
2594
+ }
2595
+ };
2596
+ },
2483
2597
  });
2598
+ return promise;
2484
2599
  }
2485
2600
 
2486
2601
  /**
2487
2602
  * PUT 请求
2488
2603
  * @param details 配置
2489
2604
  */
2490
- async put<T extends HttpxDetails>(details: T): Promise<HttpxAsyncResult<T>>;
2605
+ async put<T extends HttpxDetails>(
2606
+ details: T // @ts-ignore
2607
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2491
2608
  /**
2492
2609
  * PUT 请求
2493
2610
  * @param url 网址
@@ -2495,27 +2612,45 @@ class Httpx {
2495
2612
  */
2496
2613
  async put<T extends HttpxDetails>(
2497
2614
  url: string,
2498
- details: T
2499
- ): Promise<HttpxAsyncResult<T>>;
2615
+ details: T // @ts-ignore
2616
+ ): HttpxPromise<HttpxAsyncResult<T>>;
2500
2617
  /**
2501
2618
  * PUT 请求
2502
2619
  */
2503
2620
  async put(
2504
- ...args: (HttpxDetails | string)[]
2505
- ): Promise<HttpxAsyncResult<HttpxDetails>> {
2506
- let that = this;
2621
+ ...args: (HttpxDetails | string)[] // @ts-ignore
2622
+ ): HttpxPromise<HttpxAsyncResult<HttpxDetails>> {
2507
2623
  let details = this.HttpxRequestDetails.handleBeforeRequestDetails(...args);
2508
-
2509
- return new Promise((resolve, reject) => {
2510
- let requestDetails = that.HttpxRequestDetails.getDetails(
2511
- "PUT",
2512
- details,
2513
- resolve,
2514
- reject
2515
- );
2516
- (requestDetails as any) = that.HttpxRequestDetails.handle(requestDetails);
2517
- that.HttpxRequest.request(requestDetails);
2624
+ let abortFn: Function | null = null;
2625
+ const promise = new Promise<HttpxAsyncResult<HttpxDetails>>(
2626
+ (resolve, reject) => {
2627
+ let requestDetails = this.HttpxRequestDetails.getDetails(
2628
+ "PUT",
2629
+ details,
2630
+ resolve,
2631
+ reject
2632
+ );
2633
+ // @ts-ignore
2634
+ requestDetails = this.HttpxRequestDetails.handle(requestDetails);
2635
+ const requestResult = this.HttpxRequest.request(requestDetails);
2636
+ if (
2637
+ requestResult != null &&
2638
+ typeof requestResult.abort === "function"
2639
+ ) {
2640
+ abortFn = requestResult.abort;
2641
+ }
2642
+ }
2643
+ );
2644
+ Object.defineProperty(promise, "abort", {
2645
+ value: () => {
2646
+ return () => {
2647
+ if (typeof abortFn === "function") {
2648
+ abortFn();
2649
+ }
2650
+ };
2651
+ },
2518
2652
  });
2653
+ return promise;
2519
2654
  }
2520
2655
  }
2521
2656