UNPKG

rubico

Version:

[a]synchronous functional programming

34 lines (31 loc) 1.02 kB
const always = require('./always') const isPromise = require('./isPromise') const promiseAll = require('./promiseAll') const __ = require('./placeholder') const curry3 = require('./curry3') const objectSet = require('./objectSet') /** * @name functionObjectAll * * @synopsis * ```coffeescript [specscript] * functionObjectAll(funcs Array<function>, args Array) -> Promise|Object * ``` * * @description * Concurrently execute the same arguments for each function of an object of functions, returning an object of results. */ const functionObjectAll = function (funcs, args) { const result = {}, promises = [] for (const key in funcs) { const f = funcs[key] const resultItem = typeof f == 'function' ? f(...args) : f if (isPromise(resultItem)) { promises.push(resultItem.then(curry3(objectSet, result, key, __))) } else { result[key] = resultItem } } return promises.length == 0 ? result : promiseAll(promises).then(always(result)) } module.exports = functionObjectAll