aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/promises.js30
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());