| 978 | |
| 979 | const createAbortToken = (): AbortToken => { |
| 980 | const controller = new AbortController(); |
| 981 | return { |
| 982 | get aborted() { |
| 983 | return controller.signal.aborted; |
| 984 | }, |
| 985 | get reason() { |
| 986 | return controller.signal.reason?.toString(); |
| 987 | }, |
| 988 | get signal() { |
| 989 | return controller.signal; |
| 990 | }, |
| 991 | abort(reason?: string) { |
| 992 | if (!controller.signal.aborted) controller.abort(reason); |
| 993 | }, |
| 994 | throwIfAborted() { |
| 995 | if (controller.signal.aborted) { |
| 996 | throw new UserError( |
| 997 | controller.signal.reason?.toString() || "操作已取消", |
| 998 | ); |
| 999 | } |
| 1000 | }, |
| 1001 | }; |
| 1002 | }; |
| 1003 | |
| 1004 | const sleep = (ms: number, token?: AbortToken): Promise<void> => { |
| 1005 | return new Promise<void>((resolve, reject) => { |
| 1006 | token?.throwIfAborted(); |