File tree Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ const util = require ( 'util' ) ;
4+
5+ function Collector ( ) {
6+ }
7+
8+ util . inherits ( Collector , Function ) ;
9+
10+ const collect = ( expected ) => {
11+ const collector = ( key , value ) => {
12+ if ( collector . finished ) return collector ;
13+ collector . count ++ ;
14+ collector . data [ key ] = value ;
15+ if ( value instanceof Error ) {
16+ collector . callback ( value , collector . data ) ;
17+ return collector ;
18+ }
19+ if ( collector . expected === collector . count ) {
20+ collector . callback ( null , collector . data ) ;
21+ }
22+ return collector ;
23+ } ;
24+
25+ const fields = {
26+ count : 0 ,
27+ expected,
28+ data : { } ,
29+ callback : null ,
30+ finished : false
31+ } ;
32+
33+ Object . setPrototypeOf ( collector , Collector . prototype ) ;
34+ return Object . assign ( collector , fields ) ;
35+ } ;
36+
37+ Collector . prototype . done = function ( callback ) {
38+ this . callback = callback ;
39+ return this ;
40+ } ;
41+
42+ // Usage
43+
44+ const dc = collect ( 3 ) . done ( ( err , data ) => {
45+ console . log ( 'Done callback ' ) ;
46+ console . dir ( { err, data } ) ;
47+ } ) ;
48+
49+ dc ( 'key1' , 'value1' ) ;
50+ dc ( 'key2' , 'value2' ) ;
51+ dc ( 'key3' , 'value3' ) ;
You can’t perform that action at this time.
0 commit comments