1.0.0 • Published 4 years ago

generator-runner-reno v1.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
4 years ago

generator-runner-reno

Install

npm install generator-runner-reno

Introduction

A runner to run generator(yield) step by step and can be used in conjunction with asynchronous requests for ES6 script, and you can use it in Node.js(like koa or something else).

simple example:

const runner = require('generator-runner-reno');

runner(function*() {
    var event = yield partyTime();

    console.log( `Now, it is ${event}` );
});

function partyTime() {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            resolve("Party time!!!");
        }, 1000);
    });
}

Error handling

The runner return a Promise for task-tracing and error-handing, so you can do like this:

const runner = require('generator-runner-reno');

runner(function*() {
    var event1 = yield restTime();
    console.log( `Now, it is ${event1}` );

    var event2 = yield partyTime();
    console.log( `Now, it is ${event2}` );
}).catch((err) => {
    console.error('Wow, here is an error occurred: ', err.message);
});

function partyTime() {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            resolve("Party time!!!");
        }, 1000);
    });
}

function restTime() {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            if (Math.random() < 0.5) {
                resolve("Rest time.");
            } else {
                reject(new Error('A testing error'));
            }
        }, 2000);
    });
}

Task tracing

You can simply tracing task by using a then function, like Promise(Actually, it is a Promise):

const runner = require('generator-runner-reno');

runner(function*() {
    var a = yield partyTime();
    var b = yield restTime();

    return a + b;
}).then((res) => {
    console.log( `Now, it is ${res}` );
}, (err) => {
    console.error(err);
});

function partyTime() {
    return new Promise((resolve, reject) => {
        resolve("Party time!!!");
    });
}

function restTime() {
    return new Promise((resolve, reject) => {
        resolve("Rest time.");
    });
}

With other generator function

We can use it with another generator.

const runner = require('generator-runner-reno');

function* gen() {
    var a = yield "Party time!!!";
    var b = yield "Rest time.";

    return Math.random() < 0.5 ? a : b;
}

runner(function*() {
    var event = yield gen;

    console.log(event); //excepted 17
});

With other runner

We can use it as a middleware in other runners(like Koa), here is an example for Koa:

const koa = require('koa');
const runner = require('generator-runner-reno');

var app = koa();
app.listen(3000);

app.use(function*() {
    this.body = yield runner(partyTime);
});

function* partyTime() {
    return "<h1>Party Time!!!</h1>";
}
1.0.0

4 years ago