UNPKG

csf

Version:

Generator based flow control with context providing

67 lines (57 loc) 1.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = map; /** * Create a new array with the results of executing a handler for every * array/object element. * @example * const files = [ * './a.js', * './b.js', * './c.js' * ]; * const existsMap = yield map(files, function* (file) { * yield fileExists(file); * }); * yield echo(existsMap); // [true, true, false] * @param {array|object} iterable * @param {function|generator} handler * @return {array|object} */ var apply = require("../apply"); function map(iterable, handler) { var args = arguments; return new Promise(function (resolve, reject) { if (Symbol.iterator in iterable) { var value = void 0; var key = 0; var len = iterable.length; if (args.length > 2) { value = args[2]; } else { while (key < len && !(key in iterable)) { key++; } if (key >= len) { throw new TypeError("Reduce of empty array with no initial value"); } value = iterable[key++]; } var generator = iterable.slice(key)[Symbol.iterator](); var index = -1; var reducer = function reducer(nextMemo) { var next = generator.next(); if (next.done) { return resolve(nextMemo); } return apply(handler, this, [nextMemo, next.value, ++index, iterable]).then(reducer).catch(reject); }; reducer(value); } else { throw new Error("Operator reduce() expects an array or an iterable object"); } }); } module.exports = exports["default"];