// Sequence of promises let promise = Q(); let result = []; R.forEach(page => { promise = promise.then(r => { result = R.merge(r, result); return fetch(page); }); }, R.range(0, pages)); return promise.then(() => { console.log('result: ', result); }); // Alternative way var promise = Q(); R.reduce((memo, page) => { return memo.then(r1 => { return fetch(page) .then((r2) => r1.concat(r2)) }); }, Q.resolve([]), R.range(0, pages));