2.1.0 • Published 9 months ago

@cloud-smith/promise-series v2.1.0

Weekly downloads
-
License
ISC
Repository
github
Last release
9 months ago

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