https://github.com/co2-git/sequencer
Execute promises one after the other
https://github.com/co2-git/sequencer
Last synced: 11 months ago
JSON representation
Execute promises one after the other
- Host: GitHub
- URL: https://github.com/co2-git/sequencer
- Owner: co2-git
- Created: 2016-01-07T20:33:53.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2016-04-23T16:32:45.000Z (about 10 years ago)
- Last Synced: 2025-02-01T16:23:10.374Z (over 1 year ago)
- Language: JavaScript
- Size: 7.81 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
sequencer
===
Run promises one after the other.
# Install
```bash
npm install promise-sequencer
```
# Usage
```js
import sequencer from 'promise-sequencer';
```
# Promise
If you use standard promises, you have the method `all()` that will run a batch of promises independently from one to the other. `sequencer` will run them one by one, stopping if one in the stack fails.
# Usage
```js
sequencer(
() => new Promise(resolve => resolve(1)),
() => new Promise(resolve => resolve(true))
);
```
Second promise is run only after and if first promise has resolved.
# Rejections
A rejection would stop the stack.
```js
sequencer(
() => new Promise((resolve, reject) => reject(new Error('Bug!'))),
() => new Promise(resolve => resolve(true))
);
```
Here, the second promise is never called.
# Piping promises
The output of a promise is passed down to the next promise in stack:
```js
sequencer(
() => new Promise(resolve => resolve(1)),
number => new Promise(() => {
console.log(number); // 1
})
);
```
You can also use a second argument, which is the current buffer of all outputs so far in stack.
```js
sequencer(
() => new Promise(resolve => resolve(1)),
() => new Promise(resolve => resolve(2)),
(number, results) => new Promise(resolve => {
console.log(number); // 2
console.log(results); // [1, 2]
resolve();
})
);
```
# Chain
sequencer returns a promise itself. The arguments of the results of all the stack.
```js
sequencer(
() => new Promise(resolve => resolve(1)),
() => new Promise(resolve => resolve(2))
)
.then(results => {
console.log(results); // [1, 2]
})
.catch(error => { /*...*/ });
```
If you want the sequencer to return the last resolve, use `sequencer.pipe()`:
```js
sequencer.pipe(
() => new Promise(resolve => resolve(1)),
() => new Promise(resolve => resolve(2))
)
.then(result => {
console.log(result); // 2
})
```
# Signature
You can declare the stack of promises as an array or as a list:
```js
sequencer(promise1, promise2); // this is correct
sequencer([promise1, promise2]); // this is correct too
```
# Promisify
sequencer comes bundled with an utility that can run node callbacks as a promise:
```js
sequencer.promisify(fs.readdir, [__dirname]).then(/*...*/);
// Signature
promisify(Function functionWithCallback, [Mixed arguments]?, {Object functionBinder}?)
```