3.3.0 • Published 10 years ago
howdo v3.3.0
howdo
任务流程控制。
入门指引:http://FrontEndDev.org/column/howdo-introduction/
FEATURES
- node、浏览器通用
- 任务流程控制,支持同步、异步任务
- 支持串行、并行任务
- 支持捕获任务的错误
- 支持中止任务
- 支持回退任务
- 支持无限任务
INSTALL
nodejs
npm install -S howdovar 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
- 增加了
try、catch两个接口
v1.x
- 增加了
.task任务接口 - 增加了
.each循环接口 - 增加了
.follow串行接口 - 增加了
.together并行接口
3.3.0
10 years ago
3.2.0
10 years ago
3.1.0
10 years ago
3.0.0
10 years ago
2.0.2
10 years ago
2.0.1
10 years ago
2.0.0
10 years ago
1.1.5
11 years ago
1.1.4
11 years ago
1.1.3
11 years ago
1.1.2
11 years ago
1.1.1
11 years ago
1.1.0
11 years ago
1.0.1
11 years ago
1.0.0
11 years ago
0.0.6
11 years ago
0.0.5
11 years ago
0.0.4
12 years ago
0.0.3
12 years ago
0.0.2
12 years ago
0.0.1
12 years ago