File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11// eslint-disable-next-line @masknet/prefer-timer-id
2- export const sleep = async ( delay : number ) : Promise < void > => new Promise ( resolve => setTimeout ( resolve , delay ) )
2+ export const sleep = async ( ms : number ) : Promise < void > => new Promise ( resolve => setTimeout ( resolve , ms ) )
3+
4+ export const sleepWithAbort = async ( ms : number , signal ?: AbortSignal ) : Promise < void > => {
5+ if ( ! signal )
6+ return sleep ( ms )
7+
8+ return new Promise < void > ( ( resolve , reject ) => {
9+ if ( signal . aborted ) {
10+ reject ( signal . reason ?? new DOMException ( 'Aborted' , 'AbortError' ) )
11+ return
12+ }
13+
14+ const timer = setTimeout ( ( ) => {
15+ signal . removeEventListener ( 'abort' , onAbort )
16+ resolve ( )
17+ } , ms )
18+
19+ signal . addEventListener ( 'abort' , onAbort , { once : true } )
20+
21+ // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
22+ function onAbort ( ) {
23+ clearTimeout ( timer )
24+ signal ?. removeEventListener ( 'abort' , onAbort )
25+ reject ( signal ?. reason ?? new DOMException ( 'Aborted' , 'AbortError' ) )
26+ } ;
27+ } )
28+ }
You can’t perform that action at this time.
0 commit comments