File tree 6 files changed +26
-13
lines changed
6 files changed +26
-13
lines changed Original file line number Diff line number Diff line change @@ -16,10 +16,10 @@ async function f () {
16
16
17
17
const s = new Sema ( 13 , { capacity : arr . length } )
18
18
await Promise . all ( arr . map ( async ( elem ) => {
19
- await s . v ( )
19
+ await s . acquire ( )
20
20
console . log ( elem , s . nrWaiting ( ) )
21
21
await new Promise ( ( resolve ) => setTimeout ( resolve , getRnd ( 500 , 3000 ) ) )
22
- s . p ( )
22
+ s . release ( )
23
23
} ) )
24
24
console . log ( 'hello' )
25
25
}
Original file line number Diff line number Diff line change @@ -23,11 +23,11 @@ function resume() {
23
23
24
24
const s = new Sema ( 5 , { pauseFn : pause , resumeFn : resume } )
25
25
async function parse ( line ) {
26
- await s . v ( )
26
+ await s . acquire ( )
27
27
28
28
console . log ( line )
29
29
30
- s . p ( )
30
+ s . release ( )
31
31
}
32
32
33
33
rl . on ( 'line' , ( line ) => {
Original file line number Diff line number Diff line change @@ -6,9 +6,9 @@ const redis = require('promise-redis')
6
6
async function f ( ) {
7
7
const red = new Sema ( 3 , { initFn : ( ) => redis ( ) . createClient ( process . env . REDIS_URL ) } )
8
8
9
- const db = await red . v ( )
9
+ const db = await red . acquire ( )
10
10
console . log ( await db . get ( 'id' ) )
11
- red . p ( db )
11
+ red . release ( db )
12
12
13
13
const dbs = await red . drain ( )
14
14
dbs . map ( ( db ) => db . quit ( ) )
Original file line number Diff line number Diff line change @@ -8,10 +8,14 @@ declare module 'async-sema' {
8
8
drain ( ) : Promise < string [ ] > ;
9
9
10
10
nrWaiting ( ) : number ;
11
+
12
+ v ( ) : Promise < string > ;
13
+
14
+ acquire ( ) : Promise < string > ;
11
15
12
16
p ( token ?: string ) : void ;
13
-
14
- v ( ) : Promise < string > ;
17
+
18
+ release ( token ?: string ) : void ;
15
19
16
20
}
17
21
Original file line number Diff line number Diff line change 1
1
// Native
2
2
const EventEmitter = require ( 'events' )
3
+ const util = require ( 'util' )
3
4
4
5
// Packages
5
6
const Deque = require ( 'double-ended-queue' )
@@ -43,7 +44,7 @@ class Sema {
43
44
}
44
45
}
45
46
46
- async v ( ) {
47
+ async acquire ( ) {
47
48
let token = this . free . pop ( )
48
49
49
50
if ( token ) {
@@ -59,15 +60,21 @@ class Sema {
59
60
this . waiting . push ( { resolve, reject } )
60
61
} )
61
62
}
63
+ async v ( ) {
64
+ return this . acquire ( ) ;
65
+ }
62
66
63
- p ( token ) {
67
+ release ( token ) {
64
68
this . releaseEmitter . emit ( 'release' , this . noTokens ? '1' : token )
65
69
}
70
+ p ( token ) {
71
+ return this . release ( token )
72
+ }
66
73
67
74
drain ( ) {
68
75
const a = new Array ( this . nrTokens )
69
76
for ( let i = 0 ; i < this . nrTokens ; i ++ ) {
70
- a [ i ] = this . v ( )
77
+ a [ i ] = this . acquire ( )
71
78
}
72
79
return Promise . all ( a )
73
80
}
@@ -77,4 +84,6 @@ class Sema {
77
84
}
78
85
}
79
86
87
+ Sema . prototype . v = util . deprecate ( Sema . prototype . v , '`v()` is deperecated; use `acquire()` instead' )
88
+ Sema . prototype . p = util . deprecate ( Sema . prototype . p , '`p()` is deprecated; use `release()` instead' )
80
89
module . exports = Sema
Original file line number Diff line number Diff line change @@ -4,7 +4,7 @@ module.exports = function rateLimit(rps) {
4
4
const sema = new Sema ( rps ) ;
5
5
6
6
return async function rl ( ) {
7
- await sema . v ( ) ;
8
- setTimeout ( ( ) => sema . p ( ) , 1000 ) ;
7
+ await sema . acquire ( ) ;
8
+ setTimeout ( ( ) => sema . release ( ) , 1000 ) ;
9
9
}
10
10
}
You can’t perform that action at this time.
0 commit comments