diff options
| -rw-r--r-- | lib/promises.js | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/lib/promises.js b/lib/promises.js index b292331..6ceee1c 100644 --- a/lib/promises.js +++ b/lib/promises.js @@ -3,10 +3,38 @@ var bluebird = require("bluebird/js/release/promise")(); exports.defer = defer; exports.resolve = bluebird.resolve; -exports.props = bluebird.props; exports.reject = bluebird.reject; exports.mapSeries = bluebird.mapSeries; +var props = exports.props = function(obj) { + // We rely on .keys() and .values() returning properties in the same order. + var keys = Object.keys(obj); + var values = Object.values(obj); + + var result = bluebird.all(values).then(function(resolvedValues) { + var resolvedObj = {}; + for (var index = 0; index < keys.length; index++) { + resolvedObj[keys[index]] = resolvedValues[index]; + } + return resolvedObj; + }); + + return addAlsoToPromise(result); +}; + +function addAlsoToPromise(promise) { + promise.also = function(func) { + var result = this.then(function(value) { + var returnValue = _.extend({}, value, func(value)); + return props(returnValue); + }); + + return addAlsoToPromise(result); + }; + + return promise; +} + exports.try = function(func) { try { return bluebird.resolve(func()); |
