2.1.0 • Published 9 months ago
@cloud-smith/promise-series v2.1.0
Promise Series
A Javascript promise-series function utility. See the promise-series-demo repo for a complete demonstration.
Installtion
With NPM
npm i @cloud-smith/promise-series
With Yarn
yarn add @cloud-smith/promise-series
Example
import { promiseSeries } from '@cloud-smith/promise-series';
const tasks = [
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
];
await promiseSeries(tasks)
.then(console.log);
.catch(console.error)
The Dummy Function
For demonstration, we can use a dummy promises that succeeds or fails after a delay, just like a real fetch request.
export const dummyTask = ({ delay, shouldFail, state }: {
delay: number;
shouldFail?: Boolean;
state?: any;
}) => new Promise((resolve, reject) => {
setTimeout(() => {
if (state) console.log('Task State: ', state);
if (shouldFail) reject(`Task simulated failure`);
else resolve(`Task Success`);
}, delay);
});
It's possible to import with
import { dummyTask } from '@cloud-smith/promise-series';
Usage
Array Series
const tasks = [
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
];
await promiseSeries({ tasks })
.then(console.log)
.catch(console.error);
Named Array Series
const tasks = {
getApples: () => dummyTask({ delay: 500 }),
getOrganges: () => dummyTask({ delay: 500 }),
getGrapes: () => dummyTask({ delay: 500 }),
};
await promiseSeries({ tasks })
.then(console.log)
.catch(console.error);
Mixed task types
const tasks = [
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
() => {
console.log('non-async task testing');
}
];
await promiseSeries({ tasks })
.then(console.log)
.catch(console.error);
Getting state changes
const tasks = [
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
];
const onStateChange = stateUpdate => console;
await promiseSeries({
tasks,
onStateChange,
})
.then(console.log)
.catch(console.error);
Passing state between tasks
const tasks = [
state => dummyTask({ delay: 500, state }),
state => dummyTask({ delay: 500, state }),
state => dummyTask({ delay: 500, state }),
];
await promiseSeries({ tasks })
.then(console.log)
.catch(console.error);
Rollbacks
const tasks = [
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
];
const rollbacks = [
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
];
await promiseSeries({ tasks, rollbacks })
.then(console.log)
.catch(console.error);
Configuration
const config = {
useLogging: true,
};
const tasks = [
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
() => dummyTask({ delay: 500 }),
];
await promiseSeries({ config, tasks })
.then(console.log)
.catch(console.error);
2.1.0
9 months ago
2.0.8
9 months ago
2.0.7
9 months ago
2.0.6
9 months ago
2.0.5
9 months ago
2.0.4
9 months ago
2.0.3
9 months ago
2.0.2
9 months ago
2.0.1
10 months ago
2.0.0
10 months ago
1.2.4
10 months ago
1.2.3
10 months ago
1.2.2
10 months ago
1.2.1
10 months ago
1.2.0
10 months ago
1.1.0
10 months ago
1.0.3
10 months ago
1.0.2
10 months ago
1.0.1
10 months ago
1.0.0
10 months ago
0.2.2
10 months ago