https://github.com/f111fei/step-pipe
an async flow controll system.
https://github.com/f111fei/step-pipe
async es7 flow gulp pipe pipeline step
Last synced: 3 months ago
JSON representation
an async flow controll system.
- Host: GitHub
- URL: https://github.com/f111fei/step-pipe
- Owner: f111fei
- Created: 2017-08-08T10:13:19.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-08-08T10:13:44.000Z (almost 8 years ago)
- Last Synced: 2025-03-09T04:32:01.077Z (3 months ago)
- Topics: async, es7, flow, gulp, pipe, pipeline, step
- Language: TypeScript
- Size: 1.95 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# step-pipe
A simple control-flow library that makes parallel execution, serial execution, and error handling painless. Support `Promise`, `async/await`.
## Install
npm install --save step-pipe
## Usage
import { Step, PipeContext } from '../out';
// simple
function step1() {
return (context: PipeContext) => {
console.log('step start');
context.next('I am step 1 result');
};
}// delay callback
function step2() {
return (context: PipeContext) => {
console.log(context.content);
setTimeout(() => {
context.next('I am step 2 result');
}, 300);
};
}// with options
function step3(options?: { result?: string }) {
if (!options) {
options = {}
};
if (!options.result) {
options.result = '';
}return (context: PipeContext) => {
console.log(context.content);
setTimeout(() => {
context.next(options.result);
}, 300);
};
}// use async/await
function step4() {
return async (context: PipeContext) => {
console.log(context.content);
const date = await Promise.resolve(new Date());
await context.next('I am step 4 result:' + date.toLocaleDateString());
};
}function step5() {
return async (context: PipeContext) => {
console.log(context.content);const createPromises = () => {
const promises: Promise[] = [];
for (let i = 0; i < 10; i++) {
promises.push(new Promise((c , e) => {
setTimeout(() => {
c(i + '');
}, Math.random() * 5000);
}));
}
return promises;
}const promises1 = createPromises();
// parallel execution
const p = promises1.map(async promise => {
const result = await promise;
await context.next('parallel step:' + result);
});await Promise.all(p);
const promises2 = createPromises();
// serial execution
for (let i = 0; i < promises2.length; i++) {
const result = await promises2[i];
await context.next('serial step:' + result);
}
};
}function end() {
return async (context: PipeContext) => {
console.log(context.content);
}
}const step = new Step();
step.pipe(step1())
.pipe(step2())
.pipe(step3({ result: 'I am step 3 result' }))
.pipe(step4())
.pipe(step5())
.pipe(end());step.catch(error => {
console.log(error);
});step.start();
## API
### Step
#### pipe(context => any)
add a step to controller.
- `context.content` The result from previous step.
- `context.next` A function that go to next step. and if it is not called, the next step will not be executed.#### catch(error => void)
Add error handling function.
#### start
Start to run the step functions.