(() => {
const getPromise = (v, time) => {
return new Promise(resolve => {
console.log('running', v);
setTimeout(() => {
console.log('ending', v);
resolve(v)
}, time)
});
};
Promise.each = (arr, fn) => {
return arr.reduce((prev, cur, i) => prev.then(() => fn(cur, i)), Promise.resolve());
};
Promise.allSeries = (arrOfFn) => {
const results = arrOfFn.map(x => null);
return Promise.each(arrOfFn,
(fn, i) => Promise.resolve(fn()).then((r) => results[i] = r))
.then(() => results);
};
Promise.allSeriesWithBluebird = (arrOfFn) => Promise.mapSeries(arrOfFn, f => f());
// Attention: Expects an array of functions returning a promise,
// not a regular array of promises
Promise.allSeries([
() => getPromise('A', 500),
() => getPromise('B', 400),
() => getPromise('C', 300),
() => getPromise('D', 200),
() => getPromise('E', 100),
() => getPromise('F', 50),
() => getPromise('G', 40),
() => getPromise('H', 30)
]).then((results) => {
console.log('results', results);
});
})();
187200cookie-checkWait for Promises in series (not parallel)