var _ = require('underscore'); var sequence = function(products) { _.reduce(products, function(promise, product) { return promise.then(function() { return queryFn(product); }) }, Promise.resolve()); }; var queryFn = function(product) { return new Promise(function(resolve, reject) { console.log("querying " + product); setTimeout(function() { var result = product + " checked."; console.log(result); resolve(product + " checked."); }, 1000); }); }; var products = ["a", "b", "c"]; sequence(products);