index.js 587 B

12345678910111213141516171819202122232425262728
  1. 'use strict';
  2. const pReduce = (iterable, reducer, initialValue) => new Promise((resolve, reject) => {
  3. const iterator = iterable[Symbol.iterator]();
  4. let index = 0;
  5. const next = async total => {
  6. const element = iterator.next();
  7. if (element.done) {
  8. resolve(total);
  9. return;
  10. }
  11. try {
  12. const value = await Promise.all([total, element.value]);
  13. next(reducer(value[0], value[1], index++));
  14. } catch (error) {
  15. reject(error);
  16. }
  17. };
  18. next(initialValue);
  19. });
  20. module.exports = pReduce;
  21. // TODO: Remove this for the next major release
  22. module.exports.default = pReduce;