Skip to content

Commit f477971

Browse files
Re-write asyncMap with asyncIter
1 parent 689bafa commit f477971

File tree

1 file changed

+6
-51
lines changed

1 file changed

+6
-51
lines changed

lib/array.js

Lines changed: 6 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -52,57 +52,12 @@ const asyncMap = (items, fn, options = {}, done) => {
5252
options = DEFAULT_OPTIONS;
5353
}
5454

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));
10661
};
10762

10863
// Asynchronous filter (iterate parallel)

0 commit comments

Comments
 (0)