@@ -52,57 +52,12 @@ const asyncMap = (items, fn, options = {}, done) => {
52
52
options = DEFAULT_OPTIONS ;
53
53
}
54
54
55
- const len = items . length || items . size ;
56
- const name = items . constructor . name ;
57
- let result = done ? new items . constructor ( ) : null ;
58
- const data = common . iter ( items ) ;
59
-
60
- if ( ! len || result === null ) {
61
- if ( done ) done ( null , result ) ;
62
- return ;
63
- }
64
-
65
- const min = options . min || DEFAULT_OPTIONS . min ;
66
- const percent = options . percent || DEFAULT_OPTIONS . percent ;
67
-
68
- let begin ;
69
- let sum = 0 ;
70
- let count = 0 ;
71
-
72
- const ratio = percent / ( 1 - percent ) ;
73
-
74
- const countNumber = ( ) => {
75
- const loopTime = Date . now ( ) - begin ;
76
- const itemTime = sum / count ;
77
- const necessaryNumber = ( ratio * loopTime ) / itemTime ;
78
- return Math . max ( necessaryNumber , min ) ;
79
- } ;
80
-
81
- const next = ( ) => {
82
- const itemsNumber = count ? countNumber ( ) : min ;
83
- const iterMax = Math . min ( len , itemsNumber + count ) ;
84
-
85
- begin = Date . now ( ) ;
86
- for ( ; count < iterMax ; count ++ ) {
87
- const itemResult = fn ( data . next ( ) . value , count ) ;
88
- if ( done ) {
89
- if ( name === 'String' ) result += itemResult ;
90
- else if ( name === 'Array' ) result . push ( itemResult ) ;
91
- else if ( name === 'Set' ) result . add ( itemResult ) ;
92
- else result . set ( itemResult ) ;
93
- }
94
- }
95
- sum += Date . now ( ) - begin ;
96
-
97
- if ( count < len ) {
98
- begin = Date . now ( ) ;
99
- setTimeout ( next , 0 ) ;
100
- } else if ( done ) {
101
- done ( null , result ) ;
102
- }
103
- } ;
104
-
105
- next ( ) ;
55
+ asyncIter ( items )
56
+ . throttle ( options . percent )
57
+ . map ( fn )
58
+ . toArray ( )
59
+ . then ( array => done ( null , array ) )
60
+ . catch ( err => done ( err ) ) ;
106
61
} ;
107
62
108
63
// Asynchronous filter (iterate parallel)
0 commit comments