|
@@ -1,93 +0,0 @@
|
|
|
-'use strict';
|
|
|
-
|
|
|
-const toArray = require('./array').toArray;
|
|
|
-
|
|
|
-const argsToArray = fn => {
|
|
|
- // must not be a fat arrow since it breaks the arguments
|
|
|
- return function () {
|
|
|
- return fn(toArray(arguments));
|
|
|
- };
|
|
|
-};
|
|
|
-
|
|
|
-const curry = fn => {
|
|
|
- return function curried (...args) {
|
|
|
- const that = this;
|
|
|
-
|
|
|
- if (args.length < fn.length) {
|
|
|
- return curried.bind.apply(curried, [that].concat(args));
|
|
|
- } else {
|
|
|
- return fn.apply(that, args);
|
|
|
- }
|
|
|
- };
|
|
|
-};
|
|
|
-
|
|
|
-const combine = argsToArray(fns => fns.reverse().reduce((fnc, fn) => val => fnc(fn(val))));
|
|
|
-
|
|
|
-// cannot use fat arrow function since we don't get the arguments, then
|
|
|
-const promisify = (fn, context = null) => function () {
|
|
|
- // copy passed arguments to a new array
|
|
|
- const args = toArray(arguments);
|
|
|
-
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
- // add a callback to the arguments, which resolves the promise with the result
|
|
|
- args.push((err, data) => {
|
|
|
- if (err) {
|
|
|
- reject(err);
|
|
|
- } else {
|
|
|
- resolve(data);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- // call the original function with our callback flavoured arguments
|
|
|
- fn.apply(context, args);
|
|
|
- });
|
|
|
-};
|
|
|
-
|
|
|
-/**
|
|
|
- returns a function which executes promises one after another
|
|
|
- @param promiseGenerators an array of functions which return a promise
|
|
|
- @return function which executes the promises
|
|
|
- */
|
|
|
-const enqueue = (promiseGenerators) => {
|
|
|
- return promiseGenerators.reduce((f, promiseGenerator) => {
|
|
|
- return () => {
|
|
|
- return f().then(promiseGenerator);
|
|
|
- };
|
|
|
- });
|
|
|
-};
|
|
|
-
|
|
|
-/**
|
|
|
- Returns a function which executes promises one after another. The resulting function
|
|
|
- returns a promise, which gets filled with an array of the results of the single promises.
|
|
|
- @param promiseGenerators an array of functions which return a promise
|
|
|
- @return function which executes the promises
|
|
|
- */
|
|
|
-const enqueueWithResults = (function () {
|
|
|
- const fnQueue = (results, promiseGenerators) => promiseGenerators.reduce((f, promiseGenerator) => {
|
|
|
- return () => {
|
|
|
- return f().then(result => {
|
|
|
- results.push(result);
|
|
|
- return promiseGenerator();
|
|
|
- });
|
|
|
- };
|
|
|
- });
|
|
|
-
|
|
|
- return function (promiseGenerators) {
|
|
|
- return () => {
|
|
|
- const results = [];
|
|
|
- return fnQueue(results, promiseGenerators)().then(result => {
|
|
|
- results.push(result);
|
|
|
- return results;
|
|
|
- });
|
|
|
- };
|
|
|
- };
|
|
|
-}());
|
|
|
-
|
|
|
-module.exports = {
|
|
|
- argsToArray,
|
|
|
- combine,
|
|
|
- curry,
|
|
|
- promisify,
|
|
|
- enqueue,
|
|
|
- enqueueWithResults
|
|
|
-};
|