From 973bc5820a702ebedbaeb4ceecfea64f148dbafb Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 16 Sep 2026 23:39:44 +0100 Subject: Implement props in promises module --- lib/promises.js | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) 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()); -- cgit v1.2.3