.call( String methodName, [any args...] )
This is a convenience method for doing:
promise.then(function(obj) { return obj[methodName].call(obj, arg...); });
For example (some
is a built-in array method):
var Promise = require("bluebird"); var fs = Promise.promisifyAll(require("fs")); var path = require("path"); var thisPath = process.argv[2] || "."; var now = Date.now(); fs.readdirAsync(thisPath) .map(function(fileName) { return fs.statAsync(path.join(thisPath, fileName)); }) .call("some", function(stat) { return (now - new Date(stat.mtime)) < 10000; }) .then(function(someFilesHaveBeenModifiedLessThanTenSecondsAgo) { console.log(someFilesHaveBeenModifiedLessThanTenSecondsAgo) ; });
Chaining lo-dash or underscore methods (Copy-pasteable example):
var Promise = require("bluebird"); var pmap = Promise.map; var props = Promise.props; var _ = require("lodash"); var fs = Promise.promisifyAll(require("fs")); function getTotalSize(paths) { return pmap(paths, function(path) { return fs.statAsync(path).get("size"); }).reduce(function(a, b) { return a + b; }, 0); } fs.readdirAsync(".").then(_) .call("groupBy", function(fileName) { return fileName.charAt(0); }) .call("map", function(fileNames, firstCh) { return props({ firstCh: firstCh, count: fileNames.length, totalSize: getTotalSize(fileNames) }); }) // Since the currently wrapped array contains promises we need to unwrap it and call .all() before continuing the chain // If the currently wrapped thing was an object with properties that might be promises, we would call .props() instead .call("value").all().then(_) .call("sortBy", "count") .call("reverse") .call("map", function(data) { return data.count + " total files beginning with " + data.firstCh + " with total size of " + data.totalSize + " bytes"; }) .call("join", "\n") .then(console.log)
© 2013–2018 Petka Antonov
Licensed under the MIT License.
http://bluebirdjs.com/docs/api/call.html