3.3.0 • Published 8 years ago

howdo v3.3.0

Weekly downloads
30
License
MIT
Repository
github
Last release
8 years ago

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并行接口
3.3.0

8 years ago

3.2.0

8 years ago

3.1.0

8 years ago

3.0.0

8 years ago

2.0.2

9 years ago

2.0.1

9 years ago

2.0.0

9 years ago

1.1.5

9 years ago

1.1.4

9 years ago

1.1.3

9 years ago

1.1.2

10 years ago

1.1.1

10 years ago

1.1.0

10 years ago

1.0.1

10 years ago

1.0.0

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago