Giter VIP home page Giter VIP logo

step-pipe's Introduction

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<string>) => {
        console.log('step start');
        context.next('I am step 1 result');
    };
}

// delay callback
function step2() {
    return (context: PipeContext<string>) => {
        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<string>) => {
        console.log(context.content);
        setTimeout(() => {
            context.next(options.result);
        }, 300);
    };
}

// use async/await
function step4() {
    return async (context: PipeContext<string>) => {
        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<string>) => {
        console.log(context.content);

        const createPromises = () => {
            const promises: Promise<string>[] = [];
            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<string>) => {
        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.

step-pipe's People

Contributors

f111fei avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.