static-cms/src/lib/promiseHelper.js
Benaiah Mischenko d58cd652d8 Cleanup resolvePromiseProperties
There were a couple issues with the original version of
`resolvePromiseProperties`:

- The wrapper promise was unnecessary, since we can just return the
  `Promise.all`. Fixing this allows us to remove a wrapping function,
  reduce indentation, remove the `resolve` and `reject` calls, and
  remove the now unnecessary `.catch` line.

- There was inadvertent mutation in the `Object.assign` call - the
  first parameter to `Object.assign` is mutated, so to call it without
  mutating existing objects the first parameter should be a literal
  `{}`. This is now fixed.
2017-04-11 10:55:56 -07:00

21 lines
678 B
JavaScript

import { zipObject } from 'lodash';
export const filterPromises = (arr, filter) =>
Promise.all(arr.map(entry => filter(entry)))
.then(bits => arr.filter(entry => bits.shift()));
export const resolvePromiseProperties = (obj) => {
// Get the keys which represent promises
const promiseKeys = Object.keys(obj).filter(
key => typeof obj[key].then === "function");
const promises = promiseKeys.map(key => obj[key]);
// Resolve all promises
return Promise.all(promises)
.then(resolvedPromises =>
// Return a copy of obj with promises overwritten by their
// resolved values
Object.assign({}, obj, zipObject(promiseKeys, resolvedPromises)));
};