var Promise = require("bluebird"); var apiUrls = ["url1", "url2", "url3"]; var request = function(url) { // request the rate limited api (returns a promise) }; var saveResponse = function(response) { // save response to file/db (returns a promise) } apiUrls.reduce(function(accumulatedPromise, url) { return accumulatedPromise .then(function() { return request(url); }) .then(saveResponse); }, Promise.resolve()).then(function(){ console.log("all done."); });