22
33const common = require ( '@metarhia/common' ) ;
44const { asyncIter } = require ( './async-iterator.js' ) ;
5+ const { promisify } = require ( 'util' ) ;
56
67// Asynchronous map (iterate parallel)
78// items - <Array>, incoming
@@ -20,15 +21,7 @@ const map = (items, fn, done) => {
2021 return ;
2122 }
2223 const isArray = Array . isArray ( items ) ;
23- const data = asyncIter ( items ) . map (
24- item =>
25- new Promise ( ( resolve , reject ) => {
26- fn ( item , ( err , res ) => {
27- if ( err ) reject ( err ) ;
28- else resolve ( res ) ;
29- } ) ;
30- } )
31- ) ;
24+ const data = asyncIter ( items ) . map ( item => promisify ( fn ) ( item ) ) ;
3225 const promise = isArray ? data . toArray ( ) : data . collectTo ( items . constructor ) ;
3326 promise . then ( res => done ( null , res ) , done ) ;
3427} ;
@@ -122,15 +115,7 @@ const filter = (items, fn, done) => {
122115 return ;
123116 }
124117 const isArray = Array . isArray ( items ) ;
125- const data = asyncIter ( items ) . filter (
126- item =>
127- new Promise ( ( resolve , reject ) => {
128- fn ( item , ( err , res ) => {
129- if ( err ) reject ( err ) ;
130- else resolve ( res ) ;
131- } ) ;
132- } )
133- ) ;
118+ const data = asyncIter ( items ) . filter ( item => promisify ( fn ) ( item ) ) ;
134119 const promise = isArray ? data . toArray ( ) : data . collectTo ( items . constructor ) ;
135120 promise . then ( res => done ( null , res ) , err => done ( err ) ) ;
136121} ;
@@ -155,22 +140,10 @@ const filter = (items, fn, done) => {
155140const reduce = ( items , fn , done , initial ) => {
156141 done = done || common . emptyness ;
157142 asyncIter ( items )
158- . reduce (
159- ( prev , cur ) =>
160- new Promise ( ( resolve , reject ) => {
161- fn ( prev , cur , ( err , res ) => {
162- if ( err ) reject ( err ) ;
163- else resolve ( res ) ;
164- } ) ;
165- } ) ,
166- initial
167- )
143+ . reduce ( ( prev , cur ) => promisify ( fn ) ( prev , cur ) , initial )
168144 . then ( r => done ( null , r ) , done ) ;
169145} ;
170146
171- const REDUCE_RIGHT_EMPTY_ARR =
172- 'Metasync: reduceRight of empty array with no initial value' ;
173-
174147// Asynchronous reduceRight
175148// items - <Array>, incoming
176149// fn - <Function>, to be executed for each value in array
@@ -190,41 +163,9 @@ const REDUCE_RIGHT_EMPTY_ARR =
190163// argument in first iteration
191164const reduceRight = ( items , fn , done , initial ) => {
192165 done = done || common . emptyness ;
193- const len = items . length || items . size ;
194- items = [ ...items ] ;
195- const hasInitial = typeof initial !== 'undefined' ;
196-
197- if ( ! len && ! hasInitial ) {
198- done ( new TypeError ( REDUCE_RIGHT_EMPTY_ARR ) , initial ) ;
199- return ;
200- }
201-
202- let previous = hasInitial ? initial : items [ len - 1 ] ;
203- if ( ( ! len && hasInitial ) || ( len === 1 && ! hasInitial ) ) {
204- done ( null , previous ) ;
205- return ;
206- }
207-
208- let count = hasInitial ? len - 1 : len - 2 ;
209- let current = items [ count ] ;
210- const last = 0 ;
211-
212- const next = ( err , data ) => {
213- if ( err ) {
214- done ( err ) ;
215- return ;
216- }
217- if ( count === last ) {
218- done ( null , data ) ;
219- return ;
220- }
221- count -- ;
222- previous = data ;
223- current = items [ count ] ;
224- fn ( previous , current , next , count , items ) ;
225- } ;
226-
227- fn ( previous , current , next , count , items ) ;
166+ asyncIter ( items )
167+ . reduceRight ( ( prev , cur ) => promisify ( fn ) ( prev , cur ) , initial )
168+ . then ( r => done ( null , r ) , done ) ;
228169} ;
229170
230171// Asynchronous each (iterate in parallel)
@@ -239,17 +180,8 @@ const reduceRight = (items, fn, done, initial) => {
239180const each = ( items , fn , done ) => {
240181 done = done || common . emptyness ;
241182 asyncIter ( items )
242- . parallel (
243- item =>
244- new Promise ( ( resolve , reject ) => {
245- fn ( item , ( err , res ) => {
246- if ( err ) reject ( err ) ;
247- else resolve ( res ) ;
248- } ) ;
249- } )
250- )
251- . then ( r => done ( null , r ) )
252- . catch ( e => done ( e ) ) ;
183+ . parallel ( item => promisify ( fn ) ( item ) )
184+ . then ( r => done ( null , r ) , done ) ;
253185} ;
254186
255187// Asynchronous series
@@ -264,15 +196,7 @@ const each = (items, fn, done) => {
264196const series = ( items , fn , done ) => {
265197 done = done || common . emptyness ;
266198 asyncIter ( items )
267- . each (
268- item =>
269- new Promise ( ( resolve , reject ) => {
270- fn ( item , ( err , res ) => {
271- if ( err ) reject ( err ) ;
272- else resolve ( res ) ;
273- } ) ;
274- } )
275- )
199+ . each ( item => promisify ( fn ) ( item ) )
276200 . then ( r => done ( null , r ) , done ) ;
277201} ;
278202
@@ -289,15 +213,7 @@ const series = (items, fn, done) => {
289213const find = ( items , fn , done ) => {
290214 done = done || common . emptyness ;
291215 asyncIter ( items )
292- . find (
293- item =>
294- new Promise ( ( resolve , reject ) => {
295- fn ( item , ( err , res ) => {
296- if ( err ) reject ( err ) ;
297- else resolve ( res ) ;
298- } ) ;
299- } )
300- )
216+ . find ( item => promisify ( fn ) ( item ) )
301217 . then ( r => done ( null , r ) )
302218 . catch ( e => done ( e ) ) ;
303219} ;
@@ -315,15 +231,7 @@ const find = (items, fn, done) => {
315231const every = ( items , fn , done ) => {
316232 done = done || common . emptyness ;
317233 asyncIter ( items )
318- . every (
319- item =>
320- new Promise ( ( resolve , reject ) => {
321- fn ( item , ( err , res ) => {
322- if ( err ) reject ( err ) ;
323- else resolve ( res ) ;
324- } ) ;
325- } )
326- )
234+ . every ( item => promisify ( fn ) ( item ) )
327235 . then ( r => done ( null , r ) )
328236 . catch ( e => done ( e ) ) ;
329237} ;
@@ -341,15 +249,7 @@ const every = (items, fn, done) => {
341249const some = ( items , fn , done ) => {
342250 done = done || common . emptyness ;
343251 asyncIter ( items )
344- . some (
345- item =>
346- new Promise ( ( resolve , reject ) => {
347- fn ( item , ( err , res ) => {
348- if ( err ) reject ( err ) ;
349- else resolve ( res ) ;
350- } ) ;
351- } )
352- )
252+ . some ( item => promisify ( fn ) ( item ) )
353253 . then ( r => done ( null , r ) )
354254 . catch ( e => done ( e ) ) ;
355255} ;
0 commit comments