Neat! Pickled Muskrat!

    howdo

    3.3.0 • Public • Published

    howdo

    Build Status howdo

    任务流程控制。

    入门指引:http://FrontEndDev.org/column/howdo-introduction/

    FEATURES

    • node、浏览器通用
    • 任务流程控制,支持同步、异步任务
    • 支持串行、并行任务
    • 支持捕获任务的错误
    • 支持中止任务
    • 支持回退任务
    • 支持无限任务

    INSTALL

    nodejs

    npm install -S howdo
    var howdow = require('howdo');

    browser

    CMD

    defined(function(require, exports, module){
        var howdo = require('./path/to/howdo.js');
    });
    

    全局

    <script src="/path/to/howdo.js"></script>
    <script>
    // howdo挂载在window对象上
    // do sth...
    </script> 

    API

    遵守这个约定,回调的第一个参数为错误对象。

    // err 为 null 或 undefined 时表示回调成功
    // 否则为回调失败
    callback(err, ...);
    

    #task 分配单个任务,链式

    // 分配顺序串行任务
    howdo
        // 分配单次任务 1
        .task(function (next) {
            // 第一个参数必须是Error对象的实例,如果没有错误,传null
            // 可以传多个结果给下一个任务接收
            next(null, 1, 2, 3);
        })
        // 分配单次任务 2
        .task(function (next, data1, data2, data3) {
            // data1 = 1
            // data2 = 2
            // data3 = 3
            next(null, data1 + data2 + data3);
        })
        .follow()
        .try(function(data){
            // data = 6
        })
        .catch(function (err) {
            // err = null
        });
     
     
    // 分配顺序并行任务
    howdo
        // 分配单次任务 1
        .task(function (done) {
            // 第一个参数必须是Error对象的实例,如果没有错误,传null
            // 可以传多个结果给结果接收
            done(null, 1, 2, 3);
        })
        // 分配单次任务 2
        .task(function (done) {
            done(null, 4);
        })
        .follow()
        .try(function(data1, data2, data3, data4){
            // data1 = 1
            // data2 = 2
            // data3 = 3
            // data4 = 4
        })
        .catch(function(err){
            // err = null
        });

    #each 循环分配任务,链式

    // task是用来分配单个次序任务,而如果是批量次序任务的话,就需要用each来操作了
     
    var list = [1, 2, 3, 4];
     
    // 批量分配顺序串行任务
    howdo
        .each(list, function (key, val, next, data) {
            // 第1次: data = undefined
            // 第2次: data = 1
            // 第3次: data = 2
            // 第4次: data = 3
            next(null, val);
        })
        .follow()
        .try(function(data){
            // data = 4
        })
        .catch(function(err){
            // err = null
        });
     
     
    // 批量分配顺序并行任务
    howdo
        .each(list, function (key, val, done) {
            done(null, val);
        })
        .together()
        .try(function(data1, data2, data3, data4){
            // data1 = 1
            // data2 = 2
            // data3 = 3
            // data4 = 4
        })
        .catch(function(err){
            // err = null
        });

    #follow 顺序串行任务,链式

    follow用来收集任务结果,如其字面意思,表示多个任务是顺序串行执行的。

    #together 顺序并行任务,链式

    together也是用来收集任务结果,如其字面意思,表示多个任务是顺序并行执行的。

    try 任务成功回调,链式

    .try(function(arg0, arg1, ...){
        // ...
    })
    

    catch 任务失败回调,链式

    .try(function(err){
        // 任务失败的回调
    })
    

    until直到条件达成,否则一直继续

    howdo
        .task(function(next){
            setTimeout(function(){
                next(null, Math.random());
            }, 500);
        })
        .until(function(value){
            return value > 0.8;
        })
        .follow()
        .try(function(value){
            value > 0.8 === true;
        });
    

    rollback回滚任务

    var a = 1;
    
    howdo
        .task(function(next){
            a++;
            setTimeout(function(){
                next(new Error('任务出错'));
            });
        })
        .rollback(function(){
            a--;
        })
        .follow(function(){
            a === 1;
        });
    

    abort中止任务

    var a = 1;
    
    howdo
        .task(function(next){
            this.timeid = setTimeout(function(){
                a++;
                next(new Error('任务1出错'));
            }, 100);
        })
        .rollback(function(){
            a--;
        })
        .task(function(next){
            this.timeid = setTimeout(function(){
                a++;
                next(new Error('任务2出错'));
            }, 200);
        })
        .abort(function(){
            clearTimeout(this.timeid);
        })
        .together(function(){
            a === 1;
        });
    

    VERSION

    3.3.x

    • 增加了until接口,支持多任务串行和并行
    • 增加了rollback接口,回滚任务
    • 增加了abort接口,中止任务

    2.x

    • 增加了trycatch两个接口

    v1.x

    • 增加了.task任务接口
    • 增加了.each循环接口
    • 增加了.follow串行接口
    • 增加了.together并行接口

    Install

    npm i howdo

    DownloadsWeekly Downloads

    37

    Version

    3.3.0

    License

    MIT

    Last publish

    Collaborators

    • cloudcome