UNPKG

run-in-batch

Version:

Run your task like api calls in batch

32 lines (28 loc) 1.04 kB
const { PARALLEL, SERIES, RACE, TIMEOUT } = require("./constants"); function loadPolyfills() { // https://decembersoft.com/posts/promises-in-serial-with-array-reduce/ Promise.series = function asyncSeries(tasks) { return tasks.reduce((promiseChain, currentTask) => { return promiseChain.then((chainResults) => currentTask.then((currentResult) => [...chainResults, currentResult]) ); }, Promise.resolve([])); }; // https://stackoverflow.com/questions/48577702/setting-a-timeout-for-each-promise-within-a-promise-all Promise.delay = function (t, val) { return new Promise((resolve) => { setTimeout(resolve.bind(null, val), t); }); }; Promise.raceAll = function (promises, timeoutTime, timeoutVal, runType) { const tasks = promises.map((p) => { return Promise.race([p, Promise.delay(timeoutTime, timeoutVal)]); }); if (runType === SERIES) { return Promise.series(tasks); } else { return Promise.all(tasks); } }; } module.exports = loadPolyfills();