Promise.props(Object|Map|Promise<Object|Map> input) -> Promise
Like .all
but for object properties or Map
s* entries instead of iterated values. Returns a promise that is fulfilled when all the properties of the object or the Map
's' values** are fulfilled. The promise's fulfillment value is an object or a Map
with fulfillment values at respective keys to the original object or a Map
. If any promise in the object or Map
rejects, the returned promise is rejected with the rejection reason.
If object
is a trusted Promise
, then it will be treated as a promise for object rather than for its properties. All other objects (except Map
s) are treated for their properties as is returned by Object.keys
- the object's own enumerable properties.
*Only the native ECMAScript 6 Map
implementation that is provided by the environment as is is supported
**If the map's keys happen to be Promise
s, they are not awaited for and the resulting Map
will still have those same Promise
instances as keys
Promise.props({ pictures: getPictures(), comments: getComments(), tweets: getTweets() }).then(function(result) { console.log(result.tweets, result.pictures, result.comments); });
var Promise = require("bluebird"); var fs = Promise.promisifyAll(require("fs")); var _ = require("lodash"); var path = require("path"); var util = require("util"); function directorySizeInfo(root) { var counts = {dirs: 0, files: 0}; var stats = (function reader(root) { return fs.readdirAsync(root).map(function(fileName) { var filePath = path.join(root, fileName); return fs.statAsync(filePath).then(function(stat) { stat.filePath = filePath; if (stat.isDirectory()) { counts.dirs++; return reader(filePath) } counts.files++; return stat; }); }).then(_.flatten); })(root).then(_.chain); var smallest = stats.call("min", "size").call("pick", "size", "filePath").call("value"); var largest = stats.call("max", "size").call("pick", "size", "filePath").call("value"); var totalSize = stats.call("pluck", "size").call("reduce", function(a, b) { return a + b; }, 0); return Promise.props({ counts: counts, smallest: smallest, largest: largest, totalSize: totalSize }); } directorySizeInfo(process.argv[2] || ".").then(function(sizeInfo) { console.log(util.format(" \n\ %d directories, %d files \n\ Total size: %d bytes \n\ Smallest file: %s with %d bytes \n\ Largest file: %s with %d bytes \n\ ", sizeInfo.counts.dirs, sizeInfo.counts.files, sizeInfo.totalSize, sizeInfo.smallest.filePath, sizeInfo.smallest.size, sizeInfo.largest.filePath, sizeInfo.largest.size)); });
Note that if you have no use for the result object other than retrieving the properties, it is more convenient to use Promise.join
:
Promise.join(getPictures(), getComments(), getTweets(), function(pictures, comments, tweets) { console.log(pictures, comments, tweets); });
© 2013–2018 Petka Antonov
Licensed under the MIT License.
http://bluebirdjs.com/docs/api/promise.props.html