Example 4-10. Using a promise-enabled filter and reduce


function sumOddNumbers(numbers) {
	return numbers.filter(function removeEvenNumbers(num) {
		return num % 2 == 1;
	}).reduce(function sum(runningTotal, num) {
		return runningTotal + num;
	}, 0);
}

// Use sumOddNumbers as a synchronous function
var firstSum = sumOddNumbers([1, 2, 3, 4]);
console.log('first sum: ' + firstSum);

// Use sumOddNumbers as an async function
var promise = Bluebird.resolve([5, 6, 7, 8]);
sumOddNumbers(promise).then(function (secondSum) {
	console.log('second sum: ' + secondSum);
});

// Console output:
// first sum: 4
// second sum: 12